[英]EF: How to reuse newly created foreign key
我是EF的新手,并且被困在其中的一个场景中,在这里我需要从参考表创建或使用键。 用户可以在参考表中创建新记录,也可以使用现有记录。 为此,我创建了实体模型,如下所示:
Public class MaterialLineEntry()
{
EntryNumber = 0,
OrganisationID=0,
Organisation Organisation
};
和
Public class Organisation ()
{
ID = 0,
Description = "Test",
EntityChangeStatus ;
};
这些行条目是在另一个称为Report的实体中定义的
Public class Report()
{
List< MaterialLineEntry> materilaLineEntries;
};
如果我输入如下所示的详细信息并将对象(报告)附加到UnitOfWork并进行通信,则一切正常。 实体框架在引用表中创建一条记录,并使用新生成的外键将其输入到行条目表中。
Report report =new Reort();
report. materilaLineEntries.Add(new MaterialLineEntry()
{
EntryNumber=1,
OrganisationID=0,
Organisation=new Organisation()
{
ID = 0,
Description = "Test",
EntityChangeStatus = EntityChangeStatus.Unchanged,
}
})
但是,当我将两个对象添加到具有相同组织详细信息的行条目中时:
report. materilaLineEntries.Add(new MaterialLineEntry()
{
EntryNumber=1,
OrganisationID=0,
Organisation=new Organisation()
{
ID = 0,
Description = "Test",
EntityChangeStatus = EntityChangeStatus.Unchanged,
}
})
它应该使用先前创建的外键(因为我可能有一个唯一的常量)。 当我试图在参考表中插入重复的记录。 我在这里需要的是,实体框架工作应添加第一个组织详细信息,并应为随后出现的同一记录使用相同的ID(在本例中为“描述”列)。
请帮我解决这个问题。 提前致谢。 (我曾考虑过将数据一一添加到外表中,然后再进一步使用外键,但我想这是个坏主意)。
您在MaterialLineEntry中具有外键“ OrganizationId”。 要重新使用现有的组织,您必须仅将一个exisitng ID分配给OrganizationId。 例如
report. materilaLineEntries.Add(new MaterialLineEntry()
{
EntryNumber=1,
OrganisationID=0,//Id of a exsiting organization
});
编辑:完整代码
Report report =new Reort();
var org=new Organisation()
{
Description = "Test",
EntityChangeStatus = EntityChangeStatus.Unchanged,
};
report. materilaLineEntries.Add(new MaterialLineEntry()
{
EntryNumber=1,
OrganisationID=0,
Organisation=org
});
report.SaveChanges();
report. materilaLineEntries.Add(new MaterialLineEntry()
{
EntryNumber=1,
OrganisationID=org.Id,//Id of a exsiting organization
});
report.SaveChanges();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.