Entity framework обновить модель

Entity framework обновить модель ФСС

Установка Entity Framework 6 в проект

Всякий раз, когда вам впервые понадобится использовать Entity Framework в проекте при подходе Code-First, вы должны будете добавить ссылки на библиотеки EF, после чего можно будет работать с Entity Framework в коде. Используйте для этого следующие шаги:

Повторите эти действия без 4 пункта для установки Entity Framework в проект ASP. NET.

Обновление одного объекта

Допустим в таблице Customers существуют покупатели с фамилиями “Иванов”. Мы хотим поменять фамилии этих покупателей на “Сидоров”. Сделать это можно с помощью следующего кода:

Этот пример использует запрос LINQ для загрузки первого попавшегося покупателя с фамилией Иванов. Затем мы изменяем фамилию пользователя и вызываем метод SaveChanges(), при котором Entity Framework определяет, что объект сущности изменился и его нужно обновить используя следующий SQL-запрос:

Как описывалось в предыдущей статье, для указания на изменение данных можно использовать модель состояний Entity Framework. Состояние сущностного объекта указывается через свойство State класса DbEntityEntry, который в свою очередь доступен через свойство DbSet. Entry. Для указания на то, что объект изменился используется значение EntityState. Modified. Ниже показан пример, как мы можем обновить фамилии всех Ивановых в таблице, а не только первого попавшегося:

Этот код сгенерирует по одной инструкции UPDATE для каждого найденного покупателя с фамилией Иванов. Стоит отметить, что в показанных выше запросах мы загружали все данные пользователя, а во втором примере при использовании состояний, мы обновляли все данные, хотя достаточно лишь обновить только фамилию. ( При автоматическом обновлении свойств модели, как в первом примере, Entity Framework будет обновлять только столбец LastName, как показано в сгенерированном SQL-коде). Класс DbEntityEntry содержит метод Property(), в котором можно явно указать свойство модели, которое нужно обновлять. Ниже показан более оптимизированный запрос для смены фамилий всех пользователей, в котором мы загружаем только их идентификаторы и обновляем только фамилии:

Метод Property() возвращает объект DbPropertyEntry, в свойстве IsModified которого мы указываем, что состояние объекта изменилось. Это аналогично использованию свойства State класса DbEntityEntry. Обратите внимание на использование метода DbSet. Attach() при перечислении. Этот метод указывает, что объект нужно явно прикрепить в сущностной модели данных, т.к. он был создан вручную, а не загружен из базы данных. Действительно, следующий запрос LINQ to Entities:

Работа с данными

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

После отправки формы вы можете повторить действия и вставить новых заказчиков. Обратите внимание, что при первой отправке возникает заметная задержка в ответе от сервера – именно в данной точке и создается база данных. Когда вы отправляете форму второй раз, эта задержка исчезает, т.к. данные вставляются в уже существующую базу данных.

Соглашения о конфигурации сгенерированной базы данных

После проделанных действий особый интерес вызывает структура сгенерированной базы данных. Чтобы проверить, что код выполнился правильно, откройте окно Server Explorer в Visual Studio, нажмите на кнопке Connect to Database, в открывшемся окне выберите поставщик SQL Server и настройте подключение к созданной базе данных MyShop, используя имя сервера “. SQLEXPRESS” в окне Add Connection. После этого в окне Server Explorer отобразится новое подключение:


Entity framework обновить модель

Entity framework обновить модель

Обратив пристальный взгляд на структуру таблиц, вы сможете увидеть некоторые соглашения о проецировании сущностных классов, которые используются в Code-First. Например, свойства CustomerId и OrderId в сущностном классе Entity Framework преобразовал в первичные ключи в базе данных (EF автоматически ищет подстроку “Id” в именах свойств модели с помощью механизма рефлексии). Эти поля используют автоинкремент с помощью инструкции IDENTITY (1,1) и не могут иметь значение NULL.

Навигационные свойства в Entity Framework позволяют организовать взаимодействие между таблицами базами данных. Как вы уже видели, чтобы в родительском классе сослаться на другой связанный класс, навигационное свойство помечается как виртуальное. В Code-First есть также различные свойства для реализации отношений 0.1-1, 1-1 и many-to-many в таблицах, с которыми мы познакомимся позже, при подробном изучении аспектов Entity Framework.

Обратите внимание также на то, что Entity Framework сгенерировал еще одну таблицу с названием __MigrationHistory. Эта таблица хранит различные версии изменения структуры базы данных. В частности, в поле Model эта таблица хранит метаданные модели, представленные в виде двоичного объекта BLOB. Если позже вы измените модель в своем коде, Entity Framework вставит в эту таблицу новую запись, с метаданными новой модели.

Additional Tip

If you are going to update the models from time to time, here’s a convenient way to simplify the process.

ef dbcontext scaffold «your-connection-string» Microsoft. EntityFrameworkCore. SqlServer —output-dir=Models —force

Then optionally tick «Use Output window», hit Apply and OK.

When you go to Tools again, this new menu should be there and ready for reuse, in just a click of a button!

answered Jul 28, 2018 at 20:02

2 gold badges32 silver badges50 bronze badges

You need to do a migration DO NOT rescaffold or you will lose any work done on the models, such as data validations.

answered Aug 23, 2019 at 19:45

1 silver badge2 bronze badges

If we have customize in dbcontext class E.g. add LoggerFactory and then after we are using (‘Scaffold-DbContext «Server=(localdb)11.0;Database=Blogging;Trusted_Connection=True;» Microsoft. EntityFrameworkCore. SqlServer -OutputDir Models -Force’). this command then all customize changes will be lost.

10 silver badges20 bronze badges

answered May 16, 2019 at 13:07

5 silver badges9 bronze badges

Use command Add-migration NameOfMigrationfile which create in migration folder at the application level.

If auto migration is not enabled then we can use some below commands in Package Manager Console.

Читайте также:  Сертификаты ФСС для 1С

20 gold badges75 silver badges80 bronze badges

answered Oct 13, 2019 at 12:11

You can use this extension: EF Core Power Tools
, it will make your life much easier, and you will not have to write any command line.

answered May 15, 2021 at 14:15

1 gold badge5 silver badges15 bronze badges

For the ones that prefer to keep all in the same DbContext class, use Scaffold-DbContext with option -Context.

Scaffold-DbContext «Server=server;Database=mydb;Trusted_Connection=True;» Microsoft. EntityFrameworkCore. SqlServer -OutputDir Models -f -Context MyDbContext

The generated code for the MyDbContext will be placed on a new partial class file, so no code will be lost.

answered Jun 18, 2021 at 16:18

15 gold badges102 silver badges169 bronze badges

Solution given by Mike worked for me with no problem. A bit of elaborated answer is here based on the answer of Mike.

In case you are not using SQL Server authentication please refer to the answer given by Mike.

answered Aug 4, 2020 at 19:44

but if you have any changes in /model folder you will lose them. i am keeping /Model folder nearly intact and have all changes in /Partial folder (partial classes).

the only thing i need to change manually after rescaffolding isto remove constructor and onconfiguring (etc) from newly created dbcontext class, because i am keeping this code in partial class

answered Nov 1, 2022 at 13:05

3 silver badges6 bronze badges

6 gold badges34 silver badges55 bronze badges

answered Jul 23, 2017 at 8:20

Обновление данных

Работа с базами данных в . NET Framework — Entity Framework 6 — Обновление данных

Обновление существующих объектов в базе данных реализуется также просто, как и вставка данных. Для этого нужно сначала извлечь нужный объект из базы данных, затем изменить одно или несколько значений его свойств, а затем сохранить изменения в базе данных используя метод DbContext. SaveChanges().

Переопределение соглашений о конфигурации базы данных

Все указанные в предыдущем разделе соглашения можно переопределить с помощью средств Entity Framework. Для этого используются аннотации в виде атрибутов C# или строгая типизация с помощью Fluent API.

Использование аннотаций метаданных

Аннотации метаданных являются простейшей формой конфигурации и применяются непосредственно к классам и свойствам класса в виде атрибутов. Эти атрибуты доступны в приложении при наличии ссылок на сборки System. ComponentModel. DataAnnotations.dll и EntityFramework.dll. Помните, что аннотации позволяют простым образом настраивать конфигурацию Entity Framework, но при этом, с помощью аннотаций нельзя настроить некоторые сложные моменты, для которых используется Fluent API.

Как уже было сказано выше, аннотации используют синтаксис атрибутов языка C# или Visual Basic. В случае если вы не знакомы с использованием атрибутов, в C#, атрибуты применяются с использованием квадратных скобок. Например, аннотация данных для идентификации ключа в C# описывается как:

а в Visual Basic, используются угловые скобки:

В атрибутах может использоваться именованный параметр, в C# это выражается с помощью знака равенства:

в то время как Visual Basic использует двоеточие перед знаком равенства:

Давайте используем аннотации метаданных к нашему классу Customer. Есть несколько вещей, которые я бы хотел изменить в этом классе:

Для этого сначала нужно добавить ссылки на пространства имен System. ComponentModel. DataAnnotations и System. ComponentModel. DataAnnotations. Schema в файле Model.cs приложения CodeFirst. После этого измените структуру класса Customer, чтобы указать условия, приведенные выше:

Атрибут Required не нуждается в указании дополнительных параметров, в то время, как в атрибутах MaxLength, Range и Column эти параметры указаны. Атрибут Column влияет на схему базы данных (в частности позволяет менять тип данных столбца таблицы). Поэтому данный атрибут находится в пространстве имен System. ComponentModel. DataAnnotations. Schema, в отличие от других атрибутов. Аннотации являются компонуемыми, это означает, что вы можете использовать несколько атрибутов к одному свойству или классу, как это было сделано для свойства Name.

После того, как мы внесли изменения в модель данных, будет интересно как Enity Framework изменит структуру базы данных. Если вы теперь запустите приложение и попытаетесь вставить нового заказчика, то вы получите исключение InvalidOperationException. Мы ничего плохого не сделали с моделью данных, проблема заключается в способе инициализации базы данных, используемом в Code-First. Ниже показан текст исключения:

The model backing the ‘SampleContext’ context has changed since the database was created. Consider using Code First Migrations to update the database.

Модель класса контекста SampleContext была изменена, когда база данных уже была создана. Рассмотрите возможность обновления базы данных с помощью Code First Migrations.

Помните, что в сгенерированной таблице базы данных была добавлена таблица __ MigrationHistory? В последней записи этой хранится структура модели, на основе которой она была создана. В нашем случае Code-First определил, что модель поменялась — она не соответствует последней записи в этой таблице и, следовательно, не может гарантировать, что ваша модель будет правильно отображаться в базе данных, в результате чего Entity Framework автоматически генерирует исключение.

У вас есть несколько вариантов решения этой проблемы. Вы можете вручную удалить базу данных и запустить проект снова, при первой вставке данных сгенерируется новая база данных. Очевидно, что это решение требует определенных затрат времени и может создать проблемы блокировки файлов, если вы попытаетесь запустить приложение слишком быстро после удаления базы данных.

Другим решением проблемы, которое мы будем использовать в нашем приложении, является использование возможности Code-First обнаруживать изменения в модели данных и автоматически удалять и генерировать новую базу данных. Поведением Code-First в данной ситуации можно управлять с помощью статического метода SetInitializer() класса Database. По умолчанию, этому методу передается экземпляр класса CreateDatabaseIfNotExists, который указывает, что создавать базу данных нужно только в том случае, если базы данных не существует, а если модель изменилась, то нужно сгенерировать исключение.

Давайте изменим это поведение и передадим этому методу экземпляр объекта DropCreateDatabaseIfModelChanges, который указывает Code-First, что при изменении модели данных, базу данных нужно будет удалить и воссоздать с новой структурой. Метод SetInitializer() должен вызываться до непосредственной работы с Entity Framework, в нашем случае мы можем вызвать его в начале метода Page_Load:

Теперь, когда вы запустите приложение и попытаетесь вставить данные, Code First найдет разницу в новой модели и, с разрешения инициализатора, удалит и заново создаст базу данных. Если вы открыли таблицу базы данных для чтения данных где-то еще (например, в окне Server Explorer среды Visual Studio), Code First будет не в состоянии удалить базу данных, т.к. она используется другим процессом. В этом случае, возникнет заметная задержка при вставке данных, пока EF пытается удалить базу данных, а затем в конце концов будет сгенерировано следующее исключение:

Читайте также:  Фонд добровольного социального страхования и новая модель добровольного социального страхования в России с 2023 года

SqlException: Cannot drop database «MyShop» because it is currently in use.

SqlException: Невозможно удалить базу данных «MyShop» т.к. она сейчас используется.

Для решения этой проблемы зачастую хватает закрыть и открыть снова проект в Visual Studio.

Я также рекомендую вам рассмотреть возможность подхода к работе, когда вы вручную изменяете структуру базы данных с помощью T-SQL, а затем отражаете эти изменения в классах модели. Такой подход к работе еще называют Code-Second. Этот подход лишает вас одного из главных преимуществ Code-First – отсутствие непосредственной работы с базой данных, но он является единственной возможностью изменить структуру базы данных не удаляя ее (чтобы не удалять уже вставленные данные).

Допустим, нам нужно изменить структуру таблицы Customer изменив имя столбца Name на FirstName и добавив новый столбец LastName. Чтобы воспользоваться подходом Code-Second выполните следующие шаги:

Использование Fluent API

Настройка соглашений о конфигурации базы данных с помощью аннотаций является довольно простой, но она не может обеспечить проецирование сложной конфигурации, например создания отношения many-to-many между таблицами. Fluent API дает вам доступ к таким глубоким настройкам, но при этом является более сложным в использовании.

Концепция Fluent API заключается в вызове ряда стандартных методов для описания настройки конфигурации базы данных. Использование средства IntelliSense в редакторе кода Visual Studio облегчает использование этих методов. Например, в Code-First Fluent API, вы можете использовать метод Entity(), чтобы выбрать объект для настройки. IntelliSense покажет вам все методы, которые могут быть использованы для настройки объекта. Если вы затем используете метод Property(), чтобы выбрать свойство объекта сущности, то вы увидите все доступные настройки для конфигурирования.

Еще одним преимуществом Fluent API перед аннотациями является то, что он не засоряет код модели и организует взаимосвязь модели с контекстом данных.

Когда приходит время для построения модели, DbContext смотрит на структуру классов модели. Fluent API позволяет вмешаться в этот процесс и передать контексту дополнительные данные для конфигурации. Это становится возможным, благодаря переопределению метода DbContext. OnModelCreating(), который вызывается перед тем, как контекст построит сущностную модель данных. Этот метод является виртуальным, так что вы можете изменить его и вставить собственную логику, используя средства Fluent API.

Структура этого метода следующая:

protected override void OnModelCreating(DbModelBuilder modelBuilder)

Параметр типа DbModelBuilder в этом методе, позволяет добавлять настройки конфигурации. Методы класса DbModelBuilder являются обобщенными и поддерживают указание лямбда-выражений в качестве параметров (принимают типы делегатов), благодаря чему обеспечивается быстрая настройка конфигурации. Например, следующий код позволяет настроить таблицу Customer, аналогично показанным ранее атрибутам в модели:

Подходы с использованием аннотаций и Fluent API можно использовать в Code-First, преимущество при указании одинаковых правил отдается Fluent API.

Если у вас используется много настроек конфигурации Fluent API, то код метода OnModelCreating() может быстро стать перегруженным. Можно организовать код настроек Fluent API с помощью создания специальных классов конфигурации, унаследованных от EntityTypeConfiguration. Например, мы добавили следующий файл EntityConfigurations.cs в проект CodeFirst:

Чтобы добавить эту конфигурацию, в вызове OnModelCreating() можно использовать свойство Configurations класса DbModelBuilder:

На этом мы заканчиваем краткое рассмотрение подхода для работы с Code-First, позже, при описании Entity Framework, мы более подробно познакомимся со всеми деталями использования аннотаций данных и Fluent API.

Класс контекста данных

Сами по себе классы модели, созданные ранее, не имеют ничего общего с Entity Framework. На данном этапе они просто описывают структуру бизнес-модели, которая используется в приложении. Чтобы Entity Framework был в курсе, что эти классы служат также для управления данными в базе данных, нужно использовать класс контекста. E F имеет два базовых класса контекста:

Этот класс является более общим классом контекста данных, и используется начиная с самых ранних версий Entity Framework.

Этот класс контекста данных появился в Entity Framework 4.1 и он обеспечивает поддержку подхода Code-First (ObjectContext также обеспечивает работу подхода Code-First, но он труднее в использовании). Далее мы будем использовать DbContext.

Для создания класса контекста добавьте следующий новый класс SampleContext в проект CodeFirst:

Этот небольшой класс контекста представляет полный слой данных, который можно использовать в приложениях. Благодаря DbContext, вы сможете запросить, изменить, удалить или вставить значения в базу данных. Обратите внимание на использование конструктора в этом классе с вызовом конструктора базового класса DbContext и передачей ему строкового параметра. В этом параметре указывается либо имя базы данных либо строка подключения к базе данных (Entity Framework достаточно интеллектуален чтобы отличить тип параметра). В данном случае мы указываем явно имя базы данных, т.к. по умолчанию, при генерации базы данных Entity Framework использует имя приложения и контекста данных (например CodeFirst. SampleContext), которое нам не подходит.

После этого скомпилируйте приложение (горячая клавиша F6), чтобы исключить наличие ошибок на данном этапе.

Миграции модели данных

Работа с базами данных в . NET Framework — Entity Framework 6 — Миграции модели данных

В примерах ранее мы использовали автоматическое соглашение по инициализации базы данных при изменении модели. В предыдущей статье мы показали, как можно изменить способ инициализации базы данных. Но при любой настройке инициализатора, когда модель данных изменилась, вам в любом случае нужно удалить базу данных, чтобы воссоздать ее снова. Очевидно что такое поведение может вас не устроить, т.к. при удалении базы данных удаляются и все данные из нее.

Изменить такое поведение можно с использованием миграций, которые позволяют хранить различные версии модели в таблице __MigrationHistory. Как мы говорили ранее, для отслеживания состояния модели данных Entity Framework использует автоматически генерируемую таблицу __MigrationHistory, в которой хранится сериализованная в двоичный формат модель данных. ( Также, как говорилось в статье “Использование Code-First” вы можете использовать подход Code-Second, при котором такая проблема вообще не возникает.)

Для управления миграциями модели в Code-First используется класс DbMigration из пространства имен System. Data. Entity. Migrations. Миграции позволяют указать текущую версию модели, показав какие должны быть внесены изменения в базу данных. Допустим у вас есть следующая модель данных:

Далее вы какое-то время работаете с приложением и возможно вставляете данные в таблицы Customers и Orders. В какой-то момент вы захотели ввести ограничение на длину для поля FirstName в классе Customer и удалить столбец LastName. Напомню, что для этого можно использовать атрибут MaxLength в классе модели:

Читайте также:  ФСС парфино почтовые услуги

Если вы теперь запустите приложение, то Code-First обнаружит, что модель изменилась и, в зависимости от типа используемого инициализатора базы данных, либо выдаст исключение, либо попытается удалить и воссоздать базу данных с новой структурой. В любом случае, вы потеряете все данные из этих таблиц. Т.к. в нашей новой модели мы критически не затронули структуру модели, а просто добавили ограничение и удалили ненужный столбец, то мы можем использовать миграцию модели, чтобы указать Code-First, что можно просто изменить базу данных без ее удаления.

Enable-Migrations -ProjectName «CodeFirst» -StartUpProjectName «ProfessorWeb. EntityFramework»

Указание директив ProjectName и StartUpProjectName не обязательно. Напомню, что в нашем тестовом проекте модель данных определяется в проекте классов CodeFirst, а само приложение ASP. NET, где мы работаем с данными, называется ProfessorWeb. EntityFramework, поэтому в этой команде я явно задал имена проектов. Если вы используете модель Code-First в том же проекте, где работаете с данными, указывать эти директивы необязательно, достаточно просто выполнить команду Enable-Migrations.

После запуска этой команды, в проекте CodeFirst будет добавлена новая папка Migrations, содержащая два файла:

В файле Configuration.cs настраивается конфигурации миграций. Во втором файле InitialCreate.cs указывается структура первоначальной модели. Далее вы можете использовать в консоли две команды, для управления миграциями:

Создает шаблон для следующей миграции на основании изменений, произведенных в модели с момента создания последней миграции.

Обновляет базу данных с использованием последних миграций.

Давайте добавим новую миграцию, используя команду Add-Migration SampleMigrations. Если вы используете структуру решения как у меня, то в этой команде также нужно будет явно указать имя проекта CodeFirst, к которому будет добавлена новая миграция:

Add-Migration SampleMigrations -ProjectName «CodeFirst»

В результате Visual Studio добавит новый файл миграции в папку Migrations, имеющий в имени строку SampleMigration.cs. Откройте этот файл. Если вы изменили модель, как было показано в пример выше, то вы увидите следующий код:

Здесь, в методе Up() указывается то, как должна выглядеть модель после изменения. Мы используем различные вспомогательные методы класса DbMigration, чтобы указать ограничение на длину поля FirstName (метод AlterColumn()) и удалить столбец LastName (метод DropColumn()).

В этом классе обязательно нужно реализовать метод Down(), в котором указывается то, как модель выглядела до изменений. Это нужно для того, чтобы Code-First понимал, к какой структуре модели можно применять миграцию, описанную в методе Up(). До изменения модели у нас не было ограничения на поле FirstName, поэтому мы вызываем метод AlterColumn() и не передаем никаких параметров в третьем аргументе этого метода, вызвав String() – тем самым указав, что для строкового поля не было никаких ограничений по длине. Также, до изменения модели у нас существовал столбец LastName, поэтому его нужно добавить в методе Down().

Теперь вы можете обновить базу данных на основе данной миграции, использовав команду Update-Database:

Update-Database -ProjectName «CodeFirst»

После запуска этой команды, пакет Code First Migrations сравнит список миграций в папке Migrations, выберет ту, которая соответствует текущей модели данных и обновит структуру базы без удаления записей из таблиц:

Если в таблице Customers содержались какие-нибудь данные, то они будут сохранены после обновления базы данных.

Создание проекта

Во всех статьях на нашем сайте, которые посвящены описанию Entity Framework, мы используем проект простого веб-приложения ASP. NET. В этом разделе мы покажем как создать этот проект, а позже будем ссылаться на эту статью, чтобы каждый раз не описывать одни и те же шаги:

Обновление связанных объектов

Обновление связанных объектов происходит также как и их вставка. Мы используем навигационное свойство или внешний ключ для изменения связанного объекта, а затем сохраняем эти изменения в базе данных.

Давайте рассмотрим обновление связанных объектов в контексте нашего примера. Допустим мы допустили ошибку при определении заказа с идентификатором OrderId = 3, и нам нужно переместить этот заказ к другому пользователю (в моей тестовой базе данных этот заказ принадлежит покупателю с CustomerId = 4, у вас соответственно это может отличаться). Ниже показан пример, как это можно сделать с использованием навигационного свойства:

В этом примере мы сначала выбираем покупателя, кому будет принадлежать новый заказ, затем выбираем сам заказ, после чего обновляем ссылку на покупателя через навигационное свойство Order. Customer. Это говорит Entity Framework о том, что нужно сгенерировать инструкцию UPDATE для обновления соответствующей записи в таблице Orders:

Стоит отметить, что в этом примере мы использовали навигационное свойство на стороне зависимой таблицы Orders. Можно обновить связанные объекты также использовав навигационное свойство Customer. Orders на стороне базовой таблицы, но для этого нужно обязательно при выборке данных покупателя включить и выборку связанных с ним заказов с помощью прямой загрузки, чтобы Entity Framework мог отслеживать изменения в коллекции заказов пользователя:

Очевидно, что этот пример гораздо хуже в плане производительности, чем предыдущий, т.к. при извлечении данных покупателя мы извлекаем данные всех его заказов, количество которых может быть очень большим. Поэтому использование навигационного свойства на стороне базовой таблицы при отношении один-ко-многим является неэффективным.

Мы можем еще более оптимизировать первый пример, используя в запросах загрузку только идентификатора пользователя, идентификатора и внешнего ключа заказа, чтобы не выбирать слишком много данных. Как говорилось в предыдущем разделе, такие выбранные данные нужно будет явно прикрепить к контексту используя метод DbSet. Attach(). Ниже показан соответствующий пример:

Сгенерированный SQL-оператор UPDATE для этого примера не отличается от того, который мы приводили выше, но при этом значительно увеличивается производительность двух операторов SELECT для выборки только ключей.

Определение классов модели

Как вы уже знаете, при использовании подхода Code-First сначала определяется модель в коде, а затем, на ее основе создается (или модифицируется) база данных. Для нашего примера потребуется создать два класса, описывающих заказчика и его товары. Эти классы добавляются в файл Model.cs, созданный в предыдущем разделе:

Класс Order содержит идентификатор заказа, который позволяет уникальным образом распознать каждый заказ в таблице. Кроме того этот класс содержит свойства, описывающие название товара, его количество, описание и дату заказа. Также здесь указана ссылка на покупателя в виде свойства Customer.

Оцените статью
ФСС Help
Добавить комментарий