DataAnnotations ile yapılandırabileceğiniz her şey Fluent API ile de mümkündür. Bunun tersi doğru değil. Bu nedenle, yapılandırma seçenekleri ve esneklik açısından Fluent API "daha iyidir".
Fluent API'de mümkün olan ancak DataAnnotations ile mümkün olmayan (görebildiğim kadarıyla) konfigürasyon örnekleri (elbette tam bir liste değil):
Basamaklı silme işlemlerini kapatın:
.WillCascadeOnDelete(false)
Anahtar nesne modelinizde gösterilmediğinde veritabanında yabancı anahtar sütun adını belirtin:
.Map(conf => conf.MapKey("MyForeignKeyID"))
Özellikle nesne modelinde bir ilişkilendirmenin yalnızca bir tarafının açığa çıktığı tüm durumlarda, ilişkilerin ince granüler ayarı:
.WithMany(...)
, WithOptional(...)
, WithRequiredDependent(...)
,WithRequiredPrincipal(...)
Nesne modeli ve veritabanı tabloları arasında miras eşleştirmesinin belirlenmesi (Hiyerarşi Başına Tablo, Tür Başına Tablo, Sınıf Başına Tablo):
.Map<TDerived>(Action<EntityMappingConfiguration<TDerived>> ...)
Düzenleme: Microsoft, Fluent API'yi "gelişmiş bir özellik" olarak kabul eder (Alıntıyı buradan alın ):
Akıcı API daha gelişmiş bir özellik olarak kabul edilir ve gereksinimleriniz akıcı API kullanmanızı gerektirmediği sürece Veri Ek Açıklamalarını kullanmanızı öneririz.
Ancak bence DataAnnotations'ın sınırlamalarına çok hızlı bir şekilde ulaşırsınız (belki de son derece basit nesne modelleri hariç). Modelinizi DataAnnotations ile artık ince ayarlayamıyorsanız, son çare varsayılan eşleme kurallarını izlemektir (özelliklerinizi bu kurallara göre adlandırarak). Şu anda kuralların üzerine yazamazsınız (yalnızca onları devre dışı bırakın; MS, gelecekteki EF sürümlerinde kurallar için yapılandırma seçenekleri sunacağını duyurdu). Ancak, nesne modelinizi tanımlarken eşleme kuralları tarafından zorlanmak istemiyorsanız, tek seçeneğiniz Fluent API'dir.
Fluent API'yi öğrenmek neredeyse bir zorunluluktur, DataAnnotations basit uygulamalar için olması güzeldir.