2011-10-22 2 views
1

죄송합니다. 간단한 것이지만 EF를 배워서 대답을 찾지 못하는 것 같습니다.). 엔티티 프레임 4.1의 코드 첫 번째 연결을 여러 테이블로 설정

Order: 
    int OrderNo (Primary Key generated by program) 
    ... 

OrderDetails: 
    int OrderNo (Foreign key from Order=>OrderNo; but part of primary key for OrderDetails) 
    int DetailNo (Part of primary key; generated by program) 
    ... 

OrderResults: 
    int OrderNo (Key from Detail=>OrderNo; but part of primary key for OrderResults) 
    int DetailNo (Key from Detail=>DetailNo; but part of primary key fro OrderResult) 
    int ResultNo (Part of primary key; generated by program) 
    ... 

내 엔티티

과 같이 정의된다 : 다음과 같이

나는이 세 개의 데이터베이스 테이블을 기존

public Class Order 
{ 
    public int OrderNo { get; set; } 

    publice virtual ICollection<Detail> Details { get; set; } 
} 

public Class Detail 
{ 
    public int OrderNo { get; set; } 
    public int DetailNo { get; set; } 

    public virtual Order Order { get; set; } 
    public virtual ICollection<Result> Results { get; set; } 
} 

public Class Result 
{ 
    public int OrderNo { get; set; } 
    public int DetailNo { get; set; } 
    public int ResultNo { get; set; } 

    public virtual Detail Detail { get; set; } 
} 

그래서 당신은 유창하게 API를 사용하여 이러한 키와 연결을 정의 할 방법? 현재 OrderDetails가 Order에 올바르게 연결되어 있지만 올바른 OrderResults를 가져 오지 못하고 있습니다.

+0

다음에 태그를 선택할 때주의하십시오. 나는 당신의 질문에 대한 주위의 긴 침묵이 너무 일반적이고 "이국적인"꼬리표들로 인한 것이라고 믿는다. 나는 그들을 모두 EF 특정 태그로 대체했습니다. – Slauma

답변

0

당신은 이런 식으로 뭔가를 시도 할 수 있습니다 :

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    // Mapping for Order 
    modelBuilder.Entity<Order>() 
     .HasKey(o => o.OrderNo); 

    modelBuilder.Entity<Order>() 
     .Property(o => o.OrderNo) 
     .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); 

    modelBuilder.Entity<Order>() 
     .HasMany(o => o.Details) 
     .WithRequired(d => d.Order) 
     .HasForeignKey(d => d.OrderNo); 

    // Mapping for Detail 
    modelBuilder.Entity<Detail>() 
     .HasKey(d => new { d.OrderNo, d.DetailNo }); 
    // I believe, setting to DatabaseGeneratedOption.None is not necessary 
    // for composite keys 

    modelBuilder.Entity<Detail>() 
     .HasMany(d => d.Results) 
     .WithRequired(r => r.Detail) 
     .HasForeignKey(r => new { r.OrderNo, r.DetailNo }); 

    // Mapping for Result 
    modelBuilder.Entity<Result>() 
     .HasKey(r => new { r.OrderNo, r.DetailNo, r.ResultNo }); 
} 

유창함 API이 예에서 매우 자세한입니다. 모든 매핑은 데이터 주석으로 정의 할 수도 있습니다.

+0

트릭을 너무 많이 가져 주셔서 협의 설정을 이해하는 데 많은 시간을 할애 해 주셔서 감사합니다. 나는 내 태그에 더 조심하려고 노력할 것이다. – dhamilton

관련 문제