Car
私はインターフェースを持っているとしましょう。それぞれCar
に のようなパーツがセットになっていICollection<Part>
ます。エンティティには、クラス参照に加えPart
て、ID とオプションの外部キー参照があります。CarId
Public Car Car{ get; set;}
ここが興味深い部分です。でパーツを表示するフォームがあるとしますPart ID
。Part
リポジトリにアクセスしてフォームを作成します。form.Part = repos.Retrieve(PartID)
. これで、フォームは部品 (および部品を介して部品が属する車両) への参照を持ちます。を使用してフォームを作成しますcontext.Forms.Add(form);
データベースは、既存のものを参照するのではなく、独自の個別の ID を使用して、重複する車両と部品を作成します。
誰かがなぜこれが起こるのか説明できますか?
編集
それらを望む人のためのクラスの例:
public class Form
{
public int ID { get; set;}
public Part Part { get; set;} // Reference to Part
public int? PartId { get; set; } // Foreign Key to Part ID
}
public class Car : Vehicle
{
public int ID { get; set;}
public virtual ICollection<Part> Parts { get; set;} //Each car has parts
}
public class Part
{
public int ID { get; set;}
public Car Car { get; set;} // Reference to Car
public int? CarId { get; set; } // Foreign Key to Car
}
この誤動作を引き起こすコード。Part と Car がデータベースに既に存在すると仮定します。
form Form = new form();
form.Part = partRepository.Retrieve(5); //gets part with id = 5
context.formRepository.Add(form); // new part created, duplicate of part #5 but with the next available id.