我有一个像这样的基本继承层次结构:
public class Parent
{
public int ParentID {get; set;}
public string SomeOtherProperty {get; set;}
};
public class Child : Parent
{
public string SomeChildProperty {get; set;}
};
我有多个子类,并且我有一个 Auditor 对象,该对象具有基于 Parent 类的接口,允许我以通用方式写入数据库,如下所示
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 都会为我在数据库中创建父行。
我遇到的问题是在某些情况下(可能是 10% 的时间),我想将子记录写入数据库并将其链接到现有的父行,即我想提供外键。
我尝试了类似的东西
Child1 child = new Child();
child1.ParentID = existingID;
auditor.WriteObject(child);
但是 EF 忽略了我提供的外键并为我创建了一个新的 Parent 记录。
无论如何让EF理解这一点,因为父ID已经存在于我试图编写的子对象上,它不需要插入父行?