Как подготовить базу данных для генерации EF-модели из нее - PullRequest
0 голосов
/ 06 июня 2011

У меня есть некоторое недопонимание, как мои объекты должны быть представлены в реляционной структуре БД.

Например, если у меня есть простая структура таблиц, которая выглядит следующим образом:

enter image description here

И если я сгенерирую модель Entity Framework, основанную на этом, это будетвыглядит так:

enter image description here

Как видите, это ассоциация многих ко многим.(Любое блюдо содержит много ингредиентов, любой ингредиент может использоваться во многих блюдах)

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

Если я добавлю несколько дополнительных столбцов непосредственно в таблицу Dish_FooIngridient, это нарушит тонкость автоматического создания модели, и тогда мне придетсяисправьте ассоциации вручную в конструкторе моделей EF, а затем используйте некоторые громоздкие запросы для работы с объектами.Потому что он будет сгенерирован в нечто вроде этого:

enter image description here

Как видите, теперь есть другие избыточные свойства, которые мне не нужны.Есть ли лучший способ справиться с этим?Может быть, используя сложные свойства или унаследованную сущность, или что-то еще?

Ответы [ 3 ]

1 голос
/ 07 июня 2011

Как предлагается в «Рецептах Entity Framework 4.0», разработанных Apress, проектирование отношений «многие ко многим» без полезной нагрузки не очень хорошая практика.

К сожалению, проект, который начинается с нескольких взаимосвязей «многие-ко-многим» без полезной нагрузки, часто заканчивается несколькими взаимосвязями «много-ко-многим».Рефакторинг модели, особенно в конце цикла разработки, для учета полезных нагрузок в отношениях «многие ко многим» может быть утомительным.Не только вводятся дополнительные сущности, но также меняются запросы и шаблоны навигации по отношениям.Некоторые разработчики утверждают, что каждое отношение «многие ко многим» должно начинаться с некоторой полезной нагрузки, обычно с синтетического ключа, поэтому неизбежное добавление большей полезной нагрузки оказывает значительно меньшее влияние на проект.Итак, вот лучшая практика.Если у вас есть отношение «многие-ко-многим» без полезной нагрузки, и вы думаете, что есть вероятность, что со временем оно может измениться, чтобы включить полезную нагрузку, начните с дополнительного столбца идентификаторов в таблице ссылок.Когда вы импортируете таблицы в свою модель, вы получите два отношения «один ко многим», что означает, что код, который вы пишете, и модель, которую вы имеете, будут готовы к любому количеству дополнительных столбцов полезной нагрузки, которые появляются по мере развития проекта.Стоимость дополнительного столбца целочисленных идентификаторов обычно довольно мала, чтобы упростить модель.

0 голосов
/ 06 июня 2011

Дважды щелкните файл Model.edmx, затем в пустом пространстве рядом с вашими объектами щелкните правой кнопкой мыши и выберите «Обновить модель из базы данных ...», затем нажмите «Готово», и таблица обновится.

0 голосов
/ 06 июня 2011

Не понимаю, почему. Добавьте поля в Dish_FoodIngredient и присвойте ему первичный ключ. Добавьте эту таблицу в вашу модель и все. Возможно, вам нужно провести некоторый рефакторинг в вашем коде, но не вините в этом EF.

...