Изучите различные подходы к сущностям модели в Entity Framework

Entity Framework упрощает доступ к данным в вашем приложении, позволяя писать код для выполнения операций CRUD (создание, чтение, обновление и удаление) без необходимости напрямую взаимодействовать с базовым поставщиком базы данных. Существует три подхода к моделированию ваших сущностей в Entity Framework: сначала код, сначала модель и сначала база данных. В этой статье обсуждаются все эти три подхода, а также их плюсы и минусы.

Что такое Entity Framework? К чему такая шумиха?

Microsoft Entity Framework - это расширенная ORM, которая помогает изолировать объектную модель вашего приложения от модели данных. Это ORM-фреймворк с открытым исходным кодом для ADO.Net, включенный как часть .Net Framework. Используя инструменты ORM, вы можете сосредоточиться на бизнес-логике приложения и хранить данные в базе данных с гораздо меньшим количеством кода. Вы можете воспользоваться преимуществами ORM для преобразования данных между несовместимыми системами типов - вы можете хранить объекты своего домена в базовой базе данных, не беспокоясь о внутренних тонкостях фактического хранения данных. Entity Framework - это зрелая ORM от Microsoft, которую можно использовать с широким спектром баз данных.

В следующих разделах мы исследуем каждый из трех подходов к моделированию сущностей с помощью Entity Framework.

Сначала код

Подход Code First помогает создавать сущности в приложении, фокусируясь на требованиях домена. По сути, вы можете следовать Domain Driven Design (DDD), используя этот подход. После того, как ваши сущности определены и указаны конфигурации, вы можете создать базу данных на лету, используя и то, и другое. Подход Code First дает вам больше контроля над вашим кодом - вам больше не нужно работать с автоматически сгенерированным кодом. Мне нравится этот подход, поскольку он дает вам большую гибкость и контроль. Если у вас есть готовые доменные классы, я всегда предпочитаю этот подход, поскольку вы можете легко создать свою базу данных из доменных классов.

Обратной стороной этого подхода является то, что любые изменения в базовой схеме базы данных будут потеряны; при таком подходе ваш код определяет и создает базу данных. Подход Code First позволяет использовать Entity Framework и определять модель сущности без конструктора или файлов XML. Вы можете использовать подход POCO (простые старые объекты CLR) для определения модели и создания базы данных.

При таком подходе вы обычно создаете классы сущностей. Вот пример; типичный класс сущности приведен ниже.

 public class Product

   {

      public int ProductId { get; set; }

      public string ProductName { get; set; }

      public float Price { get; set; }

   }

Затем вы должны определить собственный контекст данных, расширив класс DbContext, как показано ниже.

public class Context : DbContext

   {

      public DbSet Products { get; set; }

   }

Наконец, вы должны указать строку подключения в файле конфигурации. Вы сделали!

База данных сначала

Вы можете использовать подход «Сначала база данных», если база данных уже разработана и готова. В этом подходе модель данных сущности (EDM) создается из базовой базы данных. В качестве примера вы используете подход сначала к базе данных при создании файлов edmx в среде разработки Visual Studio из базы данных. Изменить базу данных вручную можно легко, и вы всегда можете обновить EDM, если это необходимо (например, при изменении схемы базовой базы данных). Для этого просто обновите EDM из базы данных в Visual Studio IDE.

Модель Сначала

В подходе «Сначала модель» вы можете сначала создать EDM, а затем сгенерировать из него базу данных. Обычно вы создаете пустой EDM с помощью мастера Entity Data Model Wizard в Visual Studio, определяете сущности и их отношения в Visual Studio, а затем генерируете базу данных из этой определенной модели. Вы можете легко создавать сущности и определять их отношения и связи в конструкторе Visual Studio. Вы также можете указать свойство Key и типы данных для свойств ваших сущностей с помощью конструктора. Вы можете использовать частичные классы для реализации дополнительных функций в ваших сущностях.

Хорошо, но когда следует использовать подход Model First? Что ж, если ни классы предметной области, ни база данных не готовы, и вы предпочитаете определять модель данных с помощью визуального конструктора, этот подход для вас. Однако, как и в подходе Code First, в подходе Model First ручные изменения в базе данных будут потеряны, поскольку модель определяет базу данных.