Добавление объекта (и соответствующей таблицы) в модель EF DB-first

Я новичок в Entity Framework: я начал с модели базы данных, чтобы поддерживать приложение, созданное с использованием странной смеси EF и простого старого SQL.

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

Я создал новую сущность на диаграмме (она состоит из трех экземпляров сложной сущности, которую я только что создал), но теперь мне нужно создать добавочный сценарий БД для создания новой таблицы. Я должен сделать это как для MySQL, так и для SQL Server, но давайте начнем со второго.

Итак, теперь я вижу, что у меня проблема с компиляцией «Нет сопоставления для объекта Entity», и если я использую команду «Обновить модель из базы данных», я не вижу возможности для проталкивания изменений в БД, но это звучит правильно, учитывая слово «из».

ОК, я попытался щелкнуть «Отображение таблицы» в контекстном меню и нашел возможность сопоставить объект с таблицей. Я собирался ввести новое имя таблицы в поле «Добавить таблицу или представление» и… ПОДОЖДИТЕ! Я могу выбрать только существующие таблицы

Я понимаю, что это только для одной таблицы, поэтому я могу просто «Создать базу данных из модели», чтобы получить полный сценарий SQL, найти нужную таблицу, запустить ее в БД и «Обновить модель из БД», чтобы EF увидел таблицу , НО

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


person usr-local-ΕΨΗΕΛΩΝ    schedule 30.01.2015    source источник
comment
Из msdn.microsoft.com/en-us/data/jj205424: если вам нужно опубликовать изменения в базе данных, которая уже была развернута, вам нужно будет отредактировать сценарий или использовать инструмент сравнения схем для расчета сценария миграции.   -  person usr-local-ΕΨΗΕΛΩΝ    schedule 30.01.2015


Ответы (1)


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

В дизайне, ориентированном на базу данных, модель объекта подчинена базовому хранилищу данных. Изменения в модели (или, по крайней мере, изменения в модели, которые также требуют изменений в базовом хранилище данных) происходят ПЕРВЫМИ в базе данных.

Так как же создать новую таблицу для сущности? Вы создаете новую таблицу в своей базе данных (CREATE TABLE ...). Затем с помощью мастера «Обновить модель из базы данных» вы выбираете новую таблицу на вкладке «Добавить». EF автоматически создаст соответствующий класс EF. Если вы уже создали объект вручную, вы должны удалить его, иначе вы можете получить какое-то странное имя объекта (например, Customer1).

Сначала база данных не поддерживает создание таблиц на уровне объекта. Изменения в базе данных всегда односторонние, от базы данных к модели объекта, отсюда и термин "база данных в первую очередь".

С другой стороны, если вам удобнее создавать сущности напрямую и вы хотите построить базу данных из набора сущностей, вы должны стремиться создать дизайн «Code-First». Несмотря на название «сначала код», можно получить начальный набор классов сущностей из существующей базы данных. Термин «код сначала» относится к возникновению изменений в структуре db/model.

person Gerald Davis    schedule 11.05.2015
comment
Объяснение было четким и плавным. На самом деле я пришел к выводу, что использование команды «Создать SQL» — отличный способ обновить модель, тогда мне нужно вручную вносить изменения, используя методы старой школы. - person usr-local-ΕΨΗΕΛΩΝ; 11.05.2015