2015-11-19 12 views
18

Trong RC1 của EntityFramework 7, phát hành ngày hôm qua, Cascade Delete đã được thêm vào.EF7 RC1: Vô hiệu hóa Cascade Xóa

Để vô hiệu hóa nó mỗi mối quan hệ, tôi có thể sử dụng:

 builder.Entity<Site>().HasOne(e => e.Person) 
     .WithMany(x => x.Sites).Metadata.DeleteBehavior = DeleteBehavior.Restrict; 

Tôi muốn vô hiệu hóa nó trên toàn cầu cho một DbContext, nhưng tôi đã không tìm thấy một cách. Làm thế nào tôi có thể làm được ?

+0

Tôi rất muốn biết! – Chris

Trả lời

8

Các quy ước hiện tại không thể định cấu hình được. Quy ước CascadeDelete hiện tại chỉ áp dụng cho required relationships. Relationships Conventions: Cascade Delete trên efproject.net (Tài liệu chính thức EF7) Bạn có thể vô hiệu hóa mối quan hệ yêu cầu một cách rõ ràng nếu bạn hiểu rõ hậu quả.

 modelBuilder.Entity<Site>() 
      .HasOne(p => p.Person) 
      .WithMany(b => b.Sites) 
      .IsRequired(false); 

Nếu không (và được khuyến nghị), bạn cần đặt hành vi Xóa rõ ràng (như bạn đã phát hiện).

 modelBuilder.Entity<Site>() 
      .HasOne(p => p.Person) 
      .WithMany(b => b.Sites) 
      .OnDelete(DeleteBehavior.Restrict); 
18

Có người nói trên diễn đàn dự án github rằng cách duy nhất để làm điều đó ngay bây giờ là để lặp qua tất cả các mối quan hệ trong phương pháp OnModelCreating(ModelBuilder builder), và thiết lập các DeleteBehavior tài sản để DeleteBehavior.Restrict:

 foreach (var relationship in builder.Model.GetEntityTypes().SelectMany(e => e.GetForeignKeys())) 
     { 
      relationship.DeleteBehavior = DeleteBehavior.Restrict; 
     } 
+1

Is .OnDelete (DeleteBehavior.Restrict) giống như EF6 WillCascadeOnDelete (False)? Tôi hỏi vì tôi đã có DeleteBehavior.Restrict trên một số mô hình của tôi nhưng khi tôi tạo ra DB Schema trong SQL Server, tôi thấy rằng trong Sql các lược đồ có: ON DELETE CASCADE -> mà nói để cascade – Reza

Các vấn đề liên quan