14

의 나는이 두 가지 아주 기본적인 엔티티 있다고 가정 해 봅시다 : 몇 가지 이유를 들어EF4.1 코드 첫째, 종속 기업에 대한 탐색 속성이없는 관계를 삭제 폭포를 해제하는 방법

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

을, 나는 원하지 않는다 부모에게 참조를 다시 보류하는 ChildEntity입니다. 난 그냥 ParentEntity ID하지만 더 아무것도 유지 싶어요. 지금까지 문제가 없지만 [NOTWANTED] 라인 만 삭제하면 모든 것이 예상대로 작동합니다.

내 문제는 여기에 있습니다 : 해당 특정 경우 캐스케이드 삭제를 비활성화하는 방법은 무엇입니까?

나는 아직도 부모 탐색 속성이처럼 쉬울 것이다이 있다면 : 나는 (내가 삭제에 캐스케이드을 해제 달성 할 수있는 방법에 대해 아무 생각이 탐색 속성이없는 그러나

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

세계적으로 그것을 사용하지 않고를 당연히, 테이블 당, 그러나 다만 관계를 위해). 내가 지금 무슨 짓을

은 삭제에 캐스케이드를 사용하지 않도록하기 위해, null 허용 int로서 외부 키를 설정하는 것입니다,하지만 꽤 아니다 :

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

나는 그것이 작동하도록 얻을 수있는 방법 유창한 API? 그것이 가능해야한다고 생각하십시오.

+0

당신이 .hasOne (ParentEntity) – Saeid

답변

17

당신은 협회의 다른 측면에서 구성해야합니다 :

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

Woooo이 필요합니다! 고마워요. – darkey

+0

.WithRequired()를 .WithRequired (c => c.ParentEntity)로 변경해야했습니다. – Mason240

+0

자식에서 부모까지 탐색 속성이있는 경우 다음에서 계단식을 구성 할 수 있습니다. 아이의 매핑. –