Segala sesuatu yang dapat Anda konfigurasikan dengan DataAnnotations juga dimungkinkan dengan Fluent API. Kebalikannya tidak benar. Jadi, dari sudut pandang opsi konfigurasi dan fleksibilitas, Fluent API "lebih baik".
Contoh konfigurasi (pasti bukan daftar lengkap) yang mungkin dilakukan di Fluent API tetapi tidak dengan DataAnnotations (sejauh yang saya lihat):
Matikan penghapusan berjenjang:
.WillCascadeOnDelete(false)
Tentukan nama kolom kunci asing di database saat kunci tidak diekspos dalam model objek Anda:
.Map(conf => conf.MapKey("MyForeignKeyID"))
Penyetelan relasi yang terperinci, terutama dalam semua kasus di mana hanya satu sisi asosiasi yang diekspos dalam model objek:
.WithMany(...)
, WithOptional(...)
, WithRequiredDependent(...)
,WithRequiredPrincipal(...)
Spesifikasi pemetaan warisan antara model objek dan tabel database (Tabel-Per-Hirarki, Tabel-Per-Jenis, Tabel-Per-Kelas Beton):
.Map<TDerived>(Action<EntityMappingConfiguration<TDerived>> ...)
Sunting: Microsoft menganggap Fluent API sebagai "fitur lanjutan" (Kutipan dari sini ):
Fluent API dianggap sebagai fitur yang lebih canggih dan kami akan merekomendasikan penggunaan Anotasi Data kecuali persyaratan Anda mengharuskan Anda menggunakan API yang lancar.
Tetapi menurut saya Anda mencapai batasan DataAnnotations dengan sangat cepat (kecuali mungkin untuk model objek yang sangat sederhana). Jika Anda tidak dapat lagi menyempurnakan model Anda dengan DataAnnotations, pilihan terakhir Anda adalah mengikuti konvensi pemetaan default (dengan menamai properti Anda sesuai dengan aturan tersebut). Saat ini Anda tidak dapat menimpa konvensi (hanya menonaktifkannya; MS mengumumkan untuk memberikan opsi konfigurasi untuk konvensi di rilis EF mendatang). Namun jika Anda tidak ingin dipaksa oleh konvensi pemetaan saat Anda mendefinisikan model objek, satu-satunya pilihan Anda adalah Fluent API.
Mempelajari Fluent API hampir merupakan suatu keharusan, DataAnnotations bagus untuk dimiliki untuk aplikasi sederhana.