Сначала код Entity Framework-преимущества и недостатки Fluent Api vs аннотации данных [закрыто]
при создании базы данных с использованием кода Entity Framework-во-первых, из кода можно извлечь большую часть модели базы данных. Для точной настройки модели можно использовать Fluent API и/или атрибуты.
каковы преимущества и недостатки Fluent Api по сравнению с аннотациями данных? Другими словами: даже если в определенных ситуациях можно использовать оба метода, в каких случаях один метод должен превалировать над другим?
1 ответов
все, что вы можете настроить с помощью DataAnnotations, также возможно с помощью Fluent API. Обратное неверно. Таким образом, с точки зрения параметров конфигурации и гибкости Fluent API "лучше".
примеры конфигурации (наверняка не полный список), которые возможны в Fluent API, но не с DataAnnotations (насколько я вижу):
-
выключить каскадные удаляет:
.WillCascadeOnDelete(false)
-
Укажите имя столбца внешнего ключа в базе данных, если ключ не отображается в объектной модели:
.Map(conf => conf.MapKey("MyForeignKeyID"))
-
тонкая гранулированная настройка отношений, особенно во всех случаях, когда в объектной модели отображается только одна сторона ассоциации:
.WithMany(...)
,WithOptional(...)
,WithRequiredDependent(...)
,WithRequiredPrincipal(...)
-
спецификация сопоставления наследования между объектной моделью и таблицами базы данных (таблица на иерархию, таблица на тип, таблица на конкретный класс):
.Map<TDerived>(Action<EntityMappingConfiguration<TDerived>> ...)
Edit: Microsoft рассматривает Fluent API как " расширенную функцию "(Цитата из здесь):
fluent API считается более дополнительная функция, и мы бы рекомендуется использовать аннотации данных если ваши требования требуется для использования fluent API.
но на мой взгляд, вы очень быстро достигаете ограничений DataAnnotations (за исключением, возможно, чрезвычайно простых объектных моделей). Если вы больше не можете точно настроить модель с помощью DataAnnotations, последнее средство-следовать соглашениям сопоставления по умолчанию (называя свои свойства в соответствии с этими правилами). В настоящее время вы не можете перезаписать соглашения (только отключить их; MS объявила, чтобы дать параметры конфигурации для соглашений в будущих выпусках EF). Но если ты не хочешь, чтобы тебя заставляли соглашения о сопоставлении при определении объектной модели единственным вариантом является Fluent API.
изучение Fluent API-это почти обязательный imho, DataAnnotations-приятный для простых приложений.