2013-12-20 10 views
9

コードファーストを使用してSQL CE 4データベースを作成しようとしています。以下のサンプルコードを実行すると、データがまったく同じでも、Entity Frameworkは毎回製品の新しいレコードを挿入しています。 Entity Frameworkで関連製品が重複して作成されないようにするためには、何が必要ですか? ForeignID1とProductオブジェクトの値は、すでにデータベースに存在する値ですが、Entity Frameworkは与えたIDを消去して新しいIDを追加します。Entity Frameworkによって関連付けられたオブジェクトの新しいエントリまたは重複するエントリが作成される

namespace MyApp.Model 
{ 
    public class MyThing 
    {  
     public int ID { get; set; } 

     [ForeignKey("Product")] 
     public int ForeignID1{ get; set; } 

     public virtual Product Product { get; set; } 
    } 
} 

// Data.DataManager.cs 

public class DataManager : DbContext 
{ 
    public DbSet<Model.MyThing> Things{ get; set; } 
    public DbSet<Model.Product> Products { get; set; } 
} 

これらは入力した値です。

context.Products.Attach(myThing.Product); 
context.Things.Add(myThing); 

または:だけあなたがコンテキストに関連するエンティティを添付する必要があり、重複を避けるために、複数のMyThings

enter image description here

答えて

6

によって参照されるテーブル内の1つの値があるはずです...

myThing.Product = null; 
context.Things.Add(myThing); 

...既存のプロダクトIDにmyThing.ForeignID1を設定しても同様に機能します。

+0

これは方法で動作しました。しかし、今私は私の問題の一部はIDが1、2、3などに設定されているIDキーとして私のIDを使用していると考えている – teynon

+0

私はこれと ' DatabaseGenerated(DatabaseGeneratedOption.None)] 'を使用してID列を無効にします。私はまた、各子供(製品)のための私自身の更新プロセスを実行しました。 – teynon

+0

DBに追加したいオブジェクトのプロパティを編集する前にAttach()を使用することに注意することも重要です。たぶん私はちょうど馬鹿でした... –

関連する問題