14

Powiedzmy mam te dwa bardzo podstawowe podmioty:EF4.1 Kod pierwsze: Jak wyłączyć usuwania kaskadę na związek bez własności w jednostce zależnej nawigacji

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] 
} 

z jakichś powodów, nie chcą, ChildEntity do przechowywania odniesienia do swojego rodzica. Chcę tylko zachować identyfikator ParentEntity, ale nic więcej. Do tej pory nie ma problemu, po prostu kasuję linię [NOTWANTED] i wszystko działa zgodnie z oczekiwaniami.

Mój problem tutaj: jak wyłączyć usuwanie kaskadowe w tym konkretnym przypadku?

Gdybym jeszcze miał właściwość rodzic nawigacyjnego byłoby tak proste, jak:

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

jednakże bez właściwości nawigacji nie mam pojęcia, w jaki sposób można to osiągnąć, aby wyłączyć kaskadę Delete (bez wyłączania go globalnie oczywiście, ani według tabeli, ale tylko dla relacji).

Co mam zrobić w tej chwili jest, aby ustawić klucz obcy jako wartości pustych int, w celu wyłączenia kaskadę Delete, ale nie całkiem:

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

Jak mogę zmusić go do pracy z płynne API? Pomyśl, że to powinno być możliwe.

+0

trzeba .hasOne (ParentEntity) – Saeid

Odpowiedz

17

Musisz skonfigurować go z drugiej strony stowarzyszenia:

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

Woooo! To miło, bardzo dziękuję :) – darkey

+0

Musiałem zmienić .WithRequired() na .WithRequired (c => c.ParentEntity) – Mason240

+0

Jeśli masz właściwości nawigacji od dziecka do rodzica, możesz skonfigurować kaskadę w mapowanie dziecka. –