2012-04-11 5 views
1

EntityFramework v4.3.1을 사용하고 DbContext에서 상속하고 OnModelCreating()을 재정 의하여 코드를 통해 내 모델을 빌드하고 있습니다. 나는 이라는 테이블과 테이블을 가지고있다. 메시지 테이블에는 nullable 외래 키 Messages.CompanyId이 있습니다. 이 메시지가 설정되면 특정 메시지가 특정 회사와 연결됩니다. 이 필드가 null이면 메시지는 모든 회사와 연관됩니다.Nullable 외래 키에 대한 탐색 속성 만들기

내 문제는 OnModelCreating() 메서드에서이 동작을 표현하는 방법을 모르겠다는 것입니다. 내가 할 경우

modelBuilder.Entity<Message>().HasRequired(o => o.Company).WithMany(o => o.Messages).Map(o => o.MapKey("CompanyId")); 

나는 성공적으로 내가 TestCompany.Messages 같은 통화를 할 수 있도록 회사에 탐색 속성을 얻고 나는 특정 회사에 관련 메시지의 목록을 얻을. 그러나 모든 null 메시지를 반환해야합니다.

어떻게 달성 할 수 있습니까?

답변

5

어떤 회사와도 관련이없는 메시지를 쿼리하려는 경우 Message 엔티티 클래스의 스칼라 속성 CompanyId을 모델링해야합니다.

public class Message 
{ 
    //other porperties 

    public int? CompanyId { get; set; } 
} 

대신 HasRequiredHasOptional를 사용하여 관계를 구성합니다.

modelBuilder.Entity<Message>() 
    .HasOptional(o => o.Company).WithMany(o => o.Messages) 
    .HasForeignKey(m => m.CompanyId); 

은 그럼 당신은

var messages = db.Messages.Where(m => m.CompanyId == null); 
+0

감사를 사용하여 조회 할 수 있습니다 - 내가 잘못 질의와 모델 생성을 혼합하려고했던 것 같아요. 나는 지금 그러한 우려를 분리했다. – DotNetDeveloper

+0

유동 API를 통해서만 가능합니까? 데이터 주석에서 'HasOptional'기능을 사용할 수 있습니까? –

관련 문제