6

最初にエンティティフレームワーク 5 コードを使用しています。このようなモデルがあります。

class Product {
    public Product() {
        Fabrics = new BindingList<FabricLineItem>();
    }
    ...
    public virtual ICollection<FabricLineItem> Fabrics { get;set; }
}

class FabricLineItem {
    [ForeignKey("Fabric")]
    public int FabricId { get; set; }  
    public virtual Product Product { get;set; }
    public virtual Fabric Fabric { get;set; }  
}

class Fabric {
    ...
}

データベースにはすでに生地があります。新しい製品オブジェクトを作成し、いくつかの生地アイテムをコレクションに追加します。製品を保存しようとすると、データベース内のファブリックが複製され、呼び出し後に新しいファブリックが参照されます

 DataContext.SaveChanges(); 

savechanges への呼び出しの前に、デバッガーの値は、呼び出された後に変更されて正しいですか? なぜ私がこの奇妙な振る舞いをしているのか分かりますか?

4

3 に答える 3

0

コメントからの追加情報に基づいて: FabricLineItemID (主キー) を FabricLineItem クラス/エンティティに追加し、FabricId を削除する必要があります (EF は外部キーを作成します)。Product に関連付ける新しい FabricLineItem を作成するときは、データベースから Fabric レコードを取得し、新しく作成した FabricLineItem に関連付けてから、製品を取得して FabricLineItem に関連付けます。Product のコンストラクターで新しいリストを作成する必要はありません。あとは EF が行います。

于 2013-03-13T19:37:46.873 に答える