2012-07-13 2 views
2

매우 단순한 단방향 클래스 매핑이 있습니다. 당신이 볼 수 있듯이WillCascadeOnDelete와의 단방향 연결

public class MyDbContext : DbContext 
{ 
    public MyDbContext() : base("CodeFirstDatabase") 
    { 

    } 

    public DbSet<Contact> Contacts { get; set; } 
    public DbSet<PhoneNumber> Number { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
     modelBuilder.Conventions.Remove<IncludeMetadataConvention>(); 
     modelBuilder.Entity<Contact>() 
      .HasMany(c => c.Numbers) 
      .WithOptional() 
      //.Map(p => p.MapKey("ContactId")) 
      .WillCascadeOnDelete(true); 
    } 
} 

는, 연락 번호 목록을 가지고 있지만 번호는 (은 부모의에이 속성이 없습니다) 접촉에 대해 아무것도 알지 못한다. 여기에서 수행하려는 작업은 다음을 수행하는 것입니다. 번호가 연락처에서 제거되고 SaveChanges를 사용하여 저장되면 데이터베이스에서 해당 번호 행을 제거하고 대신 EF가 외래 키를 null로 설정하고 행은 데이터베이스에 남아 있습니다. 어떤 생각이 잘못된거야?

감사합니다.

답변

2

귀찮은 일이지만 EF에서는 고아를 자동으로 삭제하지 않습니다.

수동으로 PhoneNumber 인스턴스를 삭제해야합니다 (즉 context.Number.Remove(theNumber).

+0

어떤 수치. 덕분에 어쨌든 :) – Davita

+0

내가 알고하지 않는 것이?이 EF 5에서 지원되는 경우 당신이 알고있다. 아직 초기 단계에 있다면 다른 ORM이이를 지원합니다. –