Saat membuat database menggunakan kode pertama Entity Framework, banyak model database yang dapat diekstrak dari kode. Fluent API dan / atau Attributes dapat digunakan untuk menyempurnakan model.
Apa kelebihan dan kekurangan Fluent Api dibandingkan dengan Anotasi Data? Dengan kata lain: Bahkan jika dalam situasi tertentu kedua metode dapat digunakan, dalam kasus apa satu metode harus lebih unggul dari yang lain?
Jawaban:
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 ):
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.
sumber
[Required]
atribut pada properti dalam aplikasi ASP.NET MVC itu akan digunakan baik oleh EF dan oleh MVC untuk tujuan validasi karena keduanya dapat memproses atribut ini. Tetapi MVC tidak akan memahami konfigurasi API Lancar. Jadi, jika Anda menghapus atribut dan menggunakannyaHasRequired
di Fluent API, untuk EF akan sama tetapi tidak untuk MVC. (Menurut pendapat saya, atribut harus diberi nama yang berbeda, penggunaan namespace DataAnnotations dari berbagai komponen dan untuk tujuan yang berbeda sangat membingungkan.)[DefaultValue()]
juga tidak mungkin di Fluent Either.Fluent API
akan menjaga logika implementasi AndaDbContext
dan menjagaPOCO
kebersihan Anda