ทุกสิ่งที่คุณสามารถกำหนดค่าด้วย DataAnnotations เป็นไปได้ด้วย Fluent API การย้อนกลับไม่เป็นความจริง ดังนั้นจากมุมมองของตัวเลือกการกำหนดค่าและความยืดหยุ่น Fluent API จึง "ดีกว่า"
ตัวอย่างการกำหนดค่า (แน่นอนว่าไม่ใช่รายการทั้งหมด) ซึ่งเป็นไปได้ใน Fluent API แต่ไม่ใช่กับ DataAnnotations (เท่าที่ฉันเห็น):
ปิดการลบแบบเรียงซ้อน:
.WillCascadeOnDelete(false)
ระบุชื่อคอลัมน์คีย์ต่างประเทศในฐานข้อมูลเมื่อคีย์ไม่ถูกเปิดเผยในโมเดลอ็อบเจ็กต์ของคุณ:
.Map(conf => conf.MapKey("MyForeignKeyID"))
การปรับความสัมพันธ์แบบละเอียดโดยเฉพาะอย่างยิ่งในทุกกรณีที่เปิดเผยเพียงด้านเดียวของการเชื่อมโยงในโมเดลอ็อบเจ็กต์:
.WithMany(...)
, WithOptional(...)
, WithRequiredDependent(...)
,WithRequiredPrincipal(...)
ข้อมูลจำเพาะของการแมปมรดกระหว่างโมเดลออบเจ็กต์และตารางฐานข้อมูล (Table-Per-Hierarchy, Table-Per-Type, Table-Per-Concrete-Class):
.Map<TDerived>(Action<EntityMappingConfiguration<TDerived>> ...)
แก้ไข: Microsoft ถือว่า Fluent API เป็น "คุณลักษณะขั้นสูง" (อ้างอิงจากที่นี่ ):
API ที่คล่องแคล่วถือเป็นคุณลักษณะขั้นสูงกว่าและเราขอแนะนำให้ใช้คำอธิบายประกอบข้อมูลเว้นแต่ข้อกำหนดของคุณจะกำหนดให้คุณใช้ API ที่คล่องแคล่ว
แต่ในความคิดของฉันคุณเข้าถึงข้อ จำกัด ของ DataAnnotations ได้เร็วมาก (ยกเว้นบางทีสำหรับโมเดลวัตถุที่เรียบง่ายมาก) หากคุณไม่สามารถปรับแต่งแบบจำลองของคุณด้วย DataAnnotations ได้อีกต่อไปทางเลือกสุดท้ายของคุณคือการปฏิบัติตามข้อกำหนดการทำแผนที่เริ่มต้น (โดยการตั้งชื่อคุณสมบัติของคุณตามกฎเหล่านั้น) ขณะนี้คุณไม่สามารถเขียนทับอนุสัญญาได้ (ปิดใช้งานเท่านั้น MS ประกาศว่าจะให้ตัวเลือกการกำหนดค่าสำหรับอนุสัญญาในรุ่น EF ในอนาคต) แต่ถ้าคุณไม่ต้องการถูกบังคับโดยรูปแบบการทำแผนที่เมื่อคุณกำหนดรูปแบบวัตถุของคุณตัวเลือกเดียวของคุณก็คือ Fluent API
การเรียนรู้ Fluent API นั้นแทบจะเป็นสิ่งที่ต้องทำ แต่ DataAnnotations เป็นสิ่งที่ดีสำหรับแอปพลิเคชันง่ายๆ