2012-01-25 3 views
2

메신저를 정의 은 다음과 같이 모델 수준 뭔가 외래 키 관계를 정의 EF 모델 mvc3에서 외래 키 관계를

public class CMShoppingEntities : DbContext 
{ 
    public DbSet<Category> Categories { get; set; } 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
      modelBuilder.Entity<Category>() 
       .HasOptional(c => c.parentCategory) 
       .WithMany(c => c.ChildCategories) 
       .HasForeignKey(p => p.ParentID); 

      base.OnModelCreating(modelBuilder); 
    } 
} 

는 왜 우리가 필요하거나 데이터베이스/테이블 수준에서 외래 키 관계를 정의 할 필요가 않습니다 .. ?

+1

아니요, 필수는 아니지만 데이터의 무결성을 유지하는 데 도움이됩니다. –

+0

귀중한 의견을 보내 주신 stian 씨에게 감사드립니다.하지만 한 가지 더 묻고 싶습니다. 데이터베이스 서버에 추가로드를가하거나 관계를 유지하기 위해 더 많은 공간을 필요로할까요? –

+0

질문이 막연합니다. 왜 데이터베이스에 외래 키가 필요한지 묻고 있습니까? 또는 EF로 외래 키를 모델링하는 이유는 무엇입니까? – Eranga

답변

0

이 매핑은 데이터베이스에 FK 관계가 있음을 나타냅니다. = EF는 데이터베이스가 참조 무결성을 사용한다고 생각합니다. 데이터베이스가이를 사용하지 않으면 맵핑과 응용 프로그램이 누군가가 데이터베이스에이 예상 제한 조건을 위반하는 데이터를 저장할 때까지 계속 작동합니다. 그런 다음 응용 프로그램이 일관성없는 데이터로 인해 무작위로 작동을 멈 춥니 다.

따라서 모델에서 FK 관계를 원하면 데이터베이스에서도 사용하십시오. 당신이 폭포는 작업을 삭제할 예상되는 경우

  • :

    이 문제는 몇 가지 더 문제가있다. 데이터베이스에서 참조 제한 조건을 사용해야하고 캐스케이드 삭제도 구성해야합니다.

  • 데이터베이스에서 관계를 지정하지 않으면 코드 매핑을 사용할 때만 쉽게 작동합니다. EDMX의 경우 EF가 여전히 관계가 있다고 믿도록 SSDL 설명을 수동으로 유지해야합니다.
관련 문제