2012-02-29 13 views
1

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からのエラーメッセージは非常に具体的ではなかった...次の固定の問題にそれを変更し、野生の良い追撃に私をリードしています。

ありがとうございます。

答えて

1

このエラーは、いくつかのOrderIdプロパティストアが生成されるよう=それはIdentity又はComputedからDatabaseGeneratedOptionセットを有するマッピングされる(例外はこれが起こるエンティティ又は関係についての情報を含むべきである)ことを言います。問題がOrderAddressエンティティに関連する場合は、マッピング定義にこれを追加してください:

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

私はこれをうまくいっていませんでした。例外の詳細を探すためのヒント私はデバッガで例外を精査し、ルートエンティティまたは関係に私を導くものは何も見つかりません。 – ctorx

+0

あなたは 'Order'との関係を使って他のエンティティを持っていますか?また、あなたのデータベースは本当に正しく構成されています(関係の方向も含む)? –

+0

私はOrderを使って他のエンティティを持っていますが、複合キーではありません。 Orderテーブルのすべての関係を検証しました。すべてがOrderをPrimary Keyテーブルとして示しています。私は例外の列OrderIDがOrderエンティティのプロパティであると推論することができました。 – ctorx

関連する問題