Подтвердить что ты не робот

Как синхронизировать модель после использования кода First из базы данных с использованием Entity Framework 6.1 и MVC 5?

Предположения

  • Использование EF 6.1, MVC 5, VS 2013, С#

  • У меня есть существующая модель базы данных, разработанная в Toad DM для SQL Server, и очень важно постоянно обновлять ее.

Шаги и заметки

  • Используя модель данных сущности ADO.NET, я выбрал Code First from Database (новая функция в EF 6.1) для генерации моделей. Примечание. Класс классов и класс DbContext успешно сгенерированы, но NO.edmx или .tt был создан.

  • Далее я добавил новый элемент эстакады: контроллеры MVC 5 с представлениями, используя Entity Framework. Примечание. Созданные успехи, контроллеры и представления

Вопрос

Отныне я не хочу использовать Code First для обновления моей базы данных. Вместо этого я хочу, чтобы модели обновлялись на основе изменений базы данных. Что делать дальше? Если у меня нет файла edmx, я не смогу обновить классы модели из базы данных?

4b9b3361

Ответ 1

Код мастера модели данных сущности Сначала из базы данных выполняется отличная работа, создающая классы сущностей, как если бы они были созданы в стиле Code First. Вы спрашиваете, есть ли способ обновить эти классы по мере изменения вашей базы данных, аналогично стилю EDMX "Обновить модель из базы данных". Из того, что я исследовал, это невозможно с помощью встроенного инструментария. Тем не менее, вот одно обходное решение, которое я нашел полезным:

Скажем, у меня есть база данных с таблицей продуктов и таблицей клиентов. Первоначально я создал класс StoreDBContext и выбрал продукт как один из моих объектов. Теперь я хочу добавить таблицу клиента в качестве нового объекта в существующий контекст. Здесь, как это сделать с помощью мастера Code First Wizard:

  • Создайте новую модель данных сущностей, вызовите ее StoreDBContextTemp или что угодно Добавить новый элемент
  • Выберите сначала код из мастера базы данных сначала код из базы данных
  • Выберите клиента как объект для добавления (только клиент) и заполните мастер добавить таблицу
  • Откройте вновь созданный файл контекста, StoreDBContextTemp.cs и скопируйте виртуальные свойства новых добавленных объектов:

public virtual DbSet<Customer> Customers {get; set;}

  1. Вставьте эти новые свойства в свой исходный класс StoreDBContext.cs dbcontext.
  2. Удалить StoreDBContextTemp.cs и удалить строку подключения для StoreDBContextTemp в app.config/web.confg и т.д.
  3. Теперь вы можете использовать Customer в классе StoreDBContext

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

Ответ 2

Три вещи.

  • Нет .edmx, когда вы используете Code First.

  • Если вы используете First First Migrations, вам придется сначала написать код и после этого перенести изменения в базу данных. Это поможет вам организовать гораздо более организованный код без сгенерированного кода, который является преимуществом.

  • В Visual Studio есть плагин для противоположного. Entity Framework PowerTools позволяет вам выбирать базу данных и сопоставлять ее с объектами.

https://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d

Ответ 3

Есть еще одна вещь, чтобы добавить ответ Брайана Вандера Плааса. На шаге 4 вы также захотите скопировать все, что находится в новом методе StoreDBContextTemp.cs/OnModelCreating, и добавить его в существующий StoreDBContext.cs/OnModelCreating. В противном случае вы потеряете эти дополнения конфигурации при удалении нового класса контекста.

Ответ 4

Еще один вариант - просто удалить автоматически созданные классы из проекта и снова создать их. Если следовать этому подходу только для того, чтобы убедиться, что мы должны указывать одно и то же имя для модели данных (имя класса, которое наследуется от DbContext), как предыдущее. Название модели модели подсвечено ниже.

Имя модели данных