Entity Framework 4 с существующей моделью предметной области - PullRequest
4 голосов
/ 09 июня 2010

В настоящее время я смотрю на переход с беглого nHibernate на ADO.Net Entity Framework 4.
У меня есть проект, содержащий модель домена (pocos), которую я использовал для отображений nHibernate.Я читал в блогах, что можно использовать мою существующую модель домена с EF4, но я не видел примеров этого.Я видел примеры генерации кода T4 с EF4, но не сталкивался с примером, который показывает, как использовать существующие объекты модели предметной области с EF4.Я новичок в EF4 и хотел бы увидеть несколько примеров того, как это сделать.

Спасибо Aiyaz

1 Ответ

6 голосов
/ 09 июня 2010

Краткое прохождение:

  • Создайте модель данных объекта (.edmx) в Visual Studio и очистите свойство «custom tool» файла edmx, чтобы предотвратить генерацию кода
  • Создайте сущности в вашей модели данных сущностей с теми же именами, что и у классов вашего домена. Свойства объекта также должны иметь те же имена и типы, что и в классах домена
  • Создание класса, унаследованного от ObjectContext, для предоставления объектов (обычно в том же проекте, что и файл .edmx)
  • В этом классе создайте свойство типа ObjectSet<TEntity> для каждой из ваших сущностей

Пример кода:

public class SalesContext : ObjectContext
{
    public SalesContext(string connectionString, string defaultContainerName)
        : base(connectionString, defaultContainerName)
    {
        this.Customers = CreateObjectSet<Customer>();
        this.Products = CreateObjectSet<Product>();
        this.Orders = CreateObjectSet<Order>();
        this.OrderDetails = CreateObjectSet<OrderDetail>();
    }

    public ObjectSet<Customer> Customers { get; private set; }
    public ObjectSet<Product> Products { get; private set; }
    public ObjectSet<Order> Orders { get; private set; }
    public ObjectSet<OrderDetail> OrderDetails { get; private set; }
}

Вот и все ...

Важное замечание: если вы используете автоматическое создание прокси для отслеживания изменений (ContextOptions.ProxyCreationEnabled, что по умолчанию верно), свойства классов вашего домена должны быть виртуальными . Это необходимо, потому что прокси-серверы, сгенерированные EF 4.0, переопределят их для реализации отслеживания изменений.

Если вы не хотите использовать автоматическое создание прокси-сервера, вам придется самостоятельно следить за изменениями. Подробнее см. на этой странице MSDN

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...