14

Hãy nói rằng tôi có hai thực thể rất cơ bản:EF4.1 Mã Đầu tiên: Làm thế nào để vô hiệu hóa cascade delete cho một mối quan hệ mà không cần tài sản di chuyển trong đơn vị phụ thuộc

public class ParentEntity 
{ 
    public int Id; 
    public virtual ICollection<ChildEntity> Childrens; 
} 

public class ChildEntity 
{ 
    public int Id; 
    public int ParentEntityId; // Foreign Key 
    public virtual ParentEntity parent; // [NOTWANTED] 
} 

Đối với một số lý do, tôi không muốn ChildEntity để giữ một tham chiếu trở lại cha mẹ của mình. Tôi chỉ muốn nó giữ id ParentEntity nhưng không có gì hơn. Cho đến bây giờ, không có vấn đề gì, tôi chỉ xóa dòng [NOTWANTED] và mọi thứ hoạt động như mong đợi.

Vấn đề của tôi ở đây là: cách vô hiệu hóa xóa tầng trong trường hợp cụ thể đó?

Nếu tôi vẫn có tài sản chuyển hướng mẹ nó sẽ được dễ dàng như:

modelBuilder.Entity<ChildEntity>() 
    .HasRequired(c => c.parent) 
    .WithMany(p => p.Childrens) 
    .WillCascadeOndelete(false) 

Tuy nhiên nếu không có sự bất động sản chuyển hướng tôi không có ý tưởng làm thế nào tôi có thể đạt được để vô hiệu hóa thác trên delete (không vô hiệu hóa nó trên toàn cầu tất nhiên, cũng không phải trên mỗi bảng, nhưng chỉ cho mối quan hệ).

Những gì tôi đã làm ngay bây giờ là để thiết lập phím nước ngoài như một int nullable, để vô hiệu hóa các tầng trên xóa, nhưng đó không phải là khá:

public int? ParentEntityId; // Foreign Key - nullable just to disable cascade on delete 

Làm thế nào tôi có thể lấy nó để làm việc với API thông thạo? Hãy nghĩ rằng nó sẽ là có thể.

+0

bạn cần .hasOne (ParentEntity) – Saeid

Trả lời

17

Bạn phải cấu hình nó từ phía bên kia của hiệp hội:

modelBuilder.Entity<ParentEntity>() 
    .HasMany(p => p.Children) 
    .WithRequired() 
    .HasForeignKey(c => c.ParentEntityId) 
    .WillCascadeOnDelete(false); 
+1

Woooo! Điều đó thật tuyệt, cảm ơn rất nhiều :) – darkey

+0

Tôi phải thay đổi .WithRequired() thành .WithRequired (c => c.ParentEntity) – Mason240

+0

Nếu bạn có thuộc tính điều hướng từ con đến cha mẹ thì bạn có thể cấu hình tầng trong lập bản đồ con. –

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