Mọi thứ bạn có thể định cấu hình với DataAnnotations cũng có thể với API Fluent. Điều ngược lại là không đúng sự thật. Vì vậy, từ quan điểm của các tùy chọn cấu hình và tính linh hoạt, Fluent API là "tốt hơn".
Các ví dụ về cấu hình (chắc chắn không phải là danh sách đầy đủ) có thể có trong Fluent API nhưng không phải với DataAnnotations (theo như tôi có thể thấy):
Tắt xóa tầng:
.WillCascadeOnDelete(false)
Chỉ định tên cột khóa ngoài trong cơ sở dữ liệu khi khóa không được hiển thị trong mô hình đối tượng của bạn:
.Map(conf => conf.MapKey("MyForeignKeyID"))
Điều chỉnh chi tiết các mối quan hệ, đặc biệt là trong mọi trường hợp chỉ có một mặt của liên kết được hiển thị trong mô hình đối tượng:
.WithMany(...)
, WithOptional(...)
, WithRequiredDependent(...)
,WithRequiredPrincipal(...)
Đặc tả ánh xạ kế thừa giữa mô hình đối tượng và các bảng cơ sở dữ liệu (Bảng-Per-HVELy, Table-Per-Type, Table-Per-Concrete-Class):
.Map<TDerived>(Action<EntityMappingConfiguration<TDerived>> ...)
Chỉnh sửa: Microsoft coi API Fluent là "tính năng nâng cao" (Trích dẫn từ đây ):
API thông thạo được coi là một tính năng nâng cao hơn và chúng tôi khuyên bạn nên sử dụng Chú thích dữ liệu trừ khi các yêu cầu của bạn yêu cầu bạn sử dụng API thông thạo.
Nhưng theo tôi, bạn đạt đến giới hạn của DataAnnotations rất nhanh (ngoại trừ các mô hình đối tượng cực kỳ đơn giản). Nếu bạn không thể tinh chỉnh mô hình của mình bằng DataAnnotations nữa, biện pháp cuối cùng của bạn là tuân theo các quy ước ánh xạ mặc định (bằng cách đặt tên các thuộc tính của bạn theo các quy tắc đó). Hiện tại bạn không thể ghi đè lên các quy ước (chỉ vô hiệu hóa chúng; MS đã thông báo cung cấp tùy chọn cấu hình cho các quy ước trong các bản phát hành EF trong tương lai). Nhưng nếu bạn không muốn bị ép buộc bởi các quy ước ánh xạ khi bạn xác định mô hình đối tượng của mình, thì tùy chọn duy nhất của bạn là API Fluent.
Học API thông thạo gần như là một điều bắt buộc, DataAnnotations là một ứng dụng hay cho các ứng dụng đơn giản.