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에서 오류 메시지가 매우 구체적인 아니었다 ... 다음 고정 문제로 변경하고 야생 좋은 추격에 저를지도한다.
감사합니다.
나는 이것을 성공시키지 않았습니다. 예외에 대한 더 많은 정보를 찾을 수있는 정보는 무엇입니까? 내가 디버거에서 예외를 샅샅이 조사하고 아무것도 루트 엔티티 또는 관계로 나를 이끌어 낼 수 없습니다. – ctorx
'주문'과 관계를 맺고있는 다른 단체가 있습니까? 또한 데이터베이스가 실제로 올바르게 구성되어 있습니까 (릴레이션의 방향 포함)? –
주문을 사용하는 다른 엔티티가 있지만 복합 키가 아닙니다. Order 테이블의 모든 관계를 확인했습니다. 모든 것이 Order를 Primary Key 테이블로 표시합니다. 예외의 열 OrderID가 Order 엔터티의 속성임을 추론 할 수있었습니다. – ctorx