DbContextとExisiting Databaseを使用してEntityFrameworkを使用しています。DbContext:コンポジットキーを使用した場合のDependent property/ReferentialConstraint例外
コンテキストにOrderエンティティを追加してSaveChanges()を呼び出すと、「ReferentialConstraintの依存プロパティがストア生成の列にマッピングされています。列:OrderId」が発生しました。
私はこれがOrderAddressテーブルの複合キーのために起こっていると思います。私はそのテーブルにIDENTITYを作成したくありません。私は似ている他のSOの質問を見てきました。ここで
が簡略化され、私の実体である...ここで
// 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 });
}
}
NOTEを簡略化し、私のコンテキストであります成功しなかったソリューションを試しました。私は外部キーがデータベースに正しく設定されていることを確認しました。私の質問に関して異なるのは、コンポジットキーの使用です。
ご協力いただきありがとうございます。
UPDATE:
これは、すべての複合キーに関連していないことになりました。 Context OnModelCreatingメソッドに、データベース内のビューに基づく子エンティティOrderSummaryが必要な行が追加されました。次のような行が表示されます...
modelBuilder.Entity<OrderSummary>().HasRequired(x => x.Order).WithRequiredPrincipal(x => x.OrderSummary);
私はOrderSummaryをOrderの必須プリンシパルにするつもりはありませんでした。
modelBuilder.Entity<OrderSummary>().HasRequired(x => x.Order);
は残念ながら、EFからのエラーメッセージは非常に具体的ではなかった...次の固定の問題にそれを変更し、野生の良い追撃に私をリードしています。
ありがとうございます。
私はこれをうまくいっていませんでした。例外の詳細を探すためのヒント私はデバッガで例外を精査し、ルートエンティティまたは関係に私を導くものは何も見つかりません。 – ctorx
あなたは 'Order'との関係を使って他のエンティティを持っていますか?また、あなたのデータベースは本当に正しく構成されています(関係の方向も含む)? –
私はOrderを使って他のエンティティを持っていますが、複合キーではありません。 Orderテーブルのすべての関係を検証しました。すべてがOrderをPrimary Keyテーブルとして示しています。私は例外の列OrderIDがOrderエンティティのプロパティであると推論することができました。 – ctorx