Entity Framework Code First-преимущества и недостатки Fluent Api vs Data Annotations [закрыто]


при создании базы данных с помощью кода Entity Framework-во-первых, большая часть модели базы данных может быть извлечена из кода. Для точной настройки модели можно использовать Fluent API и/или атрибуты.

каковы преимущества и недостатки Fluent Api по сравнению с аннотациями данных? Другими словами: даже если в определенных ситуациях можно использовать оба метода, в каких случаях один метод должен преобладать над другим?

1 94

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 являются приятными для простых приложений.