Dalam tutorial EF 4.1 Code First, kode berikut diberikan:
public class Department
{
public int DepartmentId { get; set; }
[Required]
public string Name { get; set; }
public virtual ICollection<Collaborator> Collaborators { get; set; }
}
Kemudian dijelaskan bahwa antarmuka yang lancar lebih fleksibel:
Anotasi data jelas mudah digunakan tetapi lebih baik menggunakan pendekatan terprogram yang memberikan lebih banyak fleksibilitas.
Contoh menggunakan antarmuka fasih kemudian diberikan:
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);
}
Saya tidak mengerti mengapa antarmuka yang lancar seharusnya lebih baik. Benarkah itu? Dari sudut pandang saya, sepertinya penjelasan data lebih jelas, dan lebih terasa semantik.
Pertanyaan saya adalah mengapa antarmuka yang lancar menjadi pilihan yang lebih baik daripada menggunakan atribut, terutama dalam hal ini?
(Catatan: Saya cukup baru dalam keseluruhan konsep antarmuka yang lancar, jadi harap tidak ada pengetahuan sebelumnya tentang ini.)
Referensi: http://codefirst.codeplex.com/
sumber
Jawaban:
Anotasi data bersifat statis, misalnya pernyataan metode ini tidak dapat berubah saat runtime:
Antarmuka yang lancar bisa dinamis:
Belum lagi kode tersebut dapat digunakan kembali di antara properti.
sumber
Saya tidak berpikir bahwa pernyataan itu harus diterapkan secara luas; ini sangat spesifik untuk Code First. Dalam Kode Pertama, anotasi data hanya menyertakan sebagian fungsi yang tersedia di API yang lancar. Dengan kata lain, ada konfigurasi model tertentu yang hanya dapat dilakukan menggunakan API yang lancar.
Sebagai contoh, berikut adalah beberapa hal yang tidak dapat ditentukan menggunakan anotasi:
Secara pribadi, saya cenderung menggunakan anotasi data yang berhubungan dengan validasi jika memungkinkan karena teknologi lain seperti MVC juga dapat memanfaatkan ini. Untuk yang lainnya, saya lebih suka API yang lancar.
sumber
Jawaban untuk pertanyaan Anda disediakan di tautan.
Pada dasarnya, ini lebih atau kurang preferensi untuk menggunakan pendekatan Atribut vs programatik, di mana pendekatan programatik memiliki kontrol lebih besar atas entitas. Namun, ada cara kustom untuk menambahkan Atribut untuk menghias model Anda sehingga Anda mungkin terlihat juga.
Namun, untuk skenario umum validasi menerapkan Atribut harus berfungsi dengan baik karena kuat untuk mencakup sebagian besar kasus; dan selain itu mungkin menghemat waktu Anda.
sumber
Pikir saya adalah mereka merekomendasikan API yang lancar untuk implementasi kode pertama karena Anda secara eksplisit menggambarkan bagaimana hubungan dibuat dalam database. Jika Anda menggunakan anotasi data, basis data yang dibuat oleh Entity Framework mungkin tidak seperti yang Anda harapkan. Contoh awal Anda sangat sederhana, jadi seperti Anda, saya hanya akan menggunakan metode anotasi data.
sumber