次のような基本的な継承階層があります。
public class Parent
{
public int ParentID {get; set;}
public string SomeOtherProperty {get; set;}
};
public class Child : Parent
{
public string SomeChildProperty {get; set;}
};
複数の子クラスがあり、次のように、一般的な方法でデータベースに書き込むことができる Parent クラスに基づくインターフェイスを持つ Auditor オブジェクトがあります。
public class Auditor
{
public void WriteObject(Parent p)
{
using (MyDbContext context = new Context)
{
context.Parents.Add(p);
context.SaveChanges();
}
}
}
だから私はAuditorを次のように使うことができます
auditor.WriteObject(new Child1());
auditor.WriteObject(new Child2());
などなど、そして子オブジェクトを書き込むたびに、EF は DB に親行を作成しました。
私が抱えている問題は、場合によっては (おそらく 10% の時間)、子レコードを DB に書き込み、それを既存の親行にリンクしたい、つまり、外部キーを提供したいということです。
私は何かを試しました
Child1 child = new Child();
child1.ParentID = existingID;
auditor.WriteObject(child);
しかし、EF は私が提供した外部キーを無視し、新しい親レコードを作成しました。
私が書き込もうとしている Child オブジェクトに親 ID が既に存在するため、親行を挿入する必要がないことを EF に理解させる方法はありますか?