Thật không may EF cốt lõi hiện nay (mới nhất vào thời điểm này v2.0) không phơi bày một cách tốt để kiểm soát các quy ước trên toàn cầu.
Quy ước EF Core 2.0 mặc định là sử dụng DeleteBehavior.Restrict
cho các yêu cầu và DeleteBehavior.ClientSetNull
cho các mối quan hệ tùy chọn. Những gì tôi có thể đề xuất như giải pháp thay thế là vòng lặp mô hình siêu dữ liệu điển hình ở cuối ghi đè OnModelCreating
. Trong trường hợp này, xác định tất cả các mối quan hệ đã được phát hiện và sửa đổi chúng cho phù hợp:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// ...
var cascadeFKs = modelBuilder.Model.GetEntityTypes()
.SelectMany(t => t.GetForeignKeys())
.Where(fk => !fk.IsOwnership && fk.DeleteBehavior == DeleteBehavior.Cascade);
foreach (var fk in cascadeFKs)
fk.DeleteBehavior = DeleteBehavior.Restrict;
base.OnModelCreating(modelBuilder);
}
Nguồn
2017-10-02 15:01:39
Cảm ơn bạn đã trả lời. 'CascadeFKs' ở đây chỉ chứa các quan hệ 'một-nhiều' hay nó cũng bao gồm các quan hệ 'nhiều-nhiều'? –
Hiện tại không có mối quan hệ 'nhiều-với-nhiều 'đặc biệt nào trong EFC (chúng được mô phỏng với 2' một-nhiều). Vì vậy, để trả lời câu hỏi của bạn, 'cascadeFks' chứa tất cả các mối quan hệ -' một-nhiều và 'một-một. –