В руководстве EF 4.1 Code First указан следующий код:
public class Department
{
public int DepartmentId { get; set; }
[Required]
public string Name { get; set; }
public virtual ICollection<Collaborator> Collaborators { get; set; }
}
Затем объясняется, что свободный интерфейс более гибок:
Аннотации данных, безусловно, просты в использовании, но предпочтительно использовать программный подход, который обеспечивает гораздо большую гибкость.
Далее приведен пример использования свободного интерфейса:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Department>().Property(dp => dp.Name).IsRequired();
modelBuilder.Entity<Manager>().HasKey(ma => ma.ManagerCode);
modelBuilder.Entity<Manager>().Property(ma => ma.Name)
.IsConcurrencyToken(true)
.IsVariableLength()
.HasMaxLength(20);
}
Я не могу понять, почему свободный интерфейс предположительно лучше. Это правда? С моей точки зрения, похоже, что аннотации данных более четкие и имеют более чистый смысловой смысл.
Мой вопрос: почему свободный интерфейс будет лучшим вариантом, чем использование атрибутов, особенно в этом случае?
(Примечание: я совершенно новичок во всей концепции беглых интерфейсов, поэтому, пожалуйста, не ожидайте никаких предварительных знаний об этом.)
Ссылка: http://codefirst.codeplex.com/
источник
Ответы:
Аннотации данных являются статическими, например, это объявление метода не может измениться во время выполнения:
Свободный интерфейс может быть динамическим:
не говоря уже о том, что код можно повторно использовать между свойствами.
источник
Я не думаю, что это заявление должно широко применяться; это очень специфично для Code First. В Code First аннотации данных включают только подмножество функций, доступных в свободном API. Другими словами, существуют определенные конфигурации моделей, которые могут быть выполнены только с использованием свободно распространяемого API.
Например, вот некоторые вещи, которые нельзя указать с помощью аннотаций:
Лично я стараюсь использовать аннотации данных, связанные с проверкой, когда это возможно, поскольку другие технологии, такие как MVC, также могут использовать их. Для всего остального я предпочитаю свободный API.
источник
Ответ на ваш вопрос приведен в ссылке.
По сути, более или менее предпочтительным является использование атрибутов по сравнению с программным подходом, где программный подход имеет больший контроль над объектом. Тем не менее, есть собственный способ добавления атрибутов для украшения вашей модели, который вы также можете посмотреть.
Однако для распространенных сценариев проверки применение атрибутов должно работать нормально, поскольку оно надежно для большинства случаев; и кроме того, это может сэкономить ваше время.
источник
Я думаю, что они рекомендуют свободный API для первых реализаций кода, потому что вы явно описываете, как создаются отношения в базе данных. Если вы используете аннотации данных, база данных, созданная Entity Framework, может не соответствовать вашим ожиданиям. Ваш первоначальный пример очень прост, поэтому, как и вы, я бы просто использовал метод аннотации данных.
источник