2012-02-29 2 views
1

DbContext 및 Exisiting Database를 통해 EntityFramework를 사용하고 있습니다.DbContext : 복합 키를 사용할 때 Dependent property/ReferentialConstraint 예외

내 컨텍스트에 Order 엔터티를 추가하고 SaveChanges()를 호출하면 "ReferentialConstraint의 종속 속성이 저장소 생성 열로 매핑 됨 Column : OrderId"예외가 발생합니다.

내 OrderAddress 테이블의 복합 키 때문에 이러한 현상이 발생하고 있다고 생각합니다. 그 방법에 대한 희망이 있습니다 ... 해당 테이블에 IDENTITY를 만들고 싶지 않습니다. 여기

// OrderId is an IDENTITY PK 
public class Order 
{ 
    public int OrderId { get; set; } 
    public IList<OrderAddress> Addresses { get; set; } 
    public int Total { get; set; } 
} 

// PK on this table is composite key of OrderId and OrderAddressTypeId 
public class OrderAddress 
{ 
    public int OrderId { get; set; } 
    public int OrderAddressTypeId { get; set; } 
    public string Address { get; set; } 
} 

단순화 내 상황을, 내 실체가 단순화 여기

...

public class StoreContext : DbContext 
{ 
    DbSet<Order> Orders { get; set; } 
    DbSet<OrderAddress> OrderAddresses { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
      // Set the Identity for Order 
      modelBuilder.Entity<Order>() 
       .Property(x => x.OrderId) 
       .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 

      // Set composite key for Order Address 
      modelBuilder.Entity<OrderAddress>() 
       .HasKey(x => new { x.OrderId, x.OrderAddressTypeId }); 
    } 
} 

참고 : 나는 비슷 SO 질문에 다른 살펴 보았다 성공하지 못한 솔루션을 시도했습니다. 내 외래 키가 데이터베이스에서 올바르게 설정되었는지 확인했습니다. 내 질문에 대한 차이점은 복합 키의 사용입니다.

도움을 미리 감사드립니다.

UPDATE :이 결국

전혀 복합 키에 관련된다. 내 데이터베이스의 뷰를 기반으로하는 하위 엔터티 인 OrderSummary가 필요한 추가 컨텍스트 OnModelCreating 메서드가 있습니다. 이 라인은 다음과 같이 보입니다.

modelBuilder.Entity<OrderSummary>().HasRequired(x => x.Order).WithRequiredPrincipal(x => x.OrderSummary); 

OrderSummary가 Order의 필수 교장이되도록 의도 한 적이 없었습니다.

modelBuilder.Entity<OrderSummary>().HasRequired(x => x.Order); 

불행하게도, EF에서 오류 메시지가 매우 구체적인 아니었다 ... 다음 고정 문제로 변경하고 야생 좋은 추격에 저를지도한다.

감사합니다.

답변

1

이 오류 일부 OrderId 속성 저장소로서 생성 = 그것이 Identity 또는 Computed-DatabaseGeneratedOption 세트가 매핑된다 (예외 이런 엔티티 또는 관계에 대한 정보를 포함한다) 것을 말한다. 문제가 OrderAddress 엔티티와 관련이 있다면 매핑 정의에 다음을 추가하십시오.

modelBuilder.Entity<OrderAddress>() 
      .Property(x => x.OrderId) 
      .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); 
+0

나는 이것을 성공시키지 않았습니다. 예외에 대한 더 많은 정보를 찾을 수있는 정보는 무엇입니까? 내가 디버거에서 예외를 샅샅이 조사하고 아무것도 루트 엔티티 또는 관계로 나를 이끌어 낼 수 없습니다. – ctorx

+0

'주문'과 관계를 맺고있는 다른 단체가 있습니까? 또한 데이터베이스가 실제로 올바르게 구성되어 있습니까 (릴레이션의 방향 포함)? –

+0

주문을 사용하는 다른 엔티티가 있지만 복합 키가 아닙니다. Order 테이블의 모든 관계를 확인했습니다. 모든 것이 Order를 Primary Key 테이블로 표시합니다. 예외의 열 OrderID가 Order 엔터티의 속성임을 추론 할 수있었습니다. – ctorx