我是EF的新手并且在我的一个场景中停留在那里,我需要在参考表中创建或使用键。 用户可以在参考表中创建新记录,也可以使用现有记录。为此,我创建了我的实体模型,如下所示:
Public class MaterialLineEntry()
{
EntryNumber = 0,
OrganisationID=0,
Organisation Organisation
};
AND
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,
}
})
它应该使用以前创建的外键(因为我可能有一个唯一的constrant)。 因为我试图在参考表中插入重复记录。我需要的是,实体框架工作应该添加第一个组织细节,并且应该使用相同的ID来发生相同记录(在本例中为描述列)。
请帮我解决这个问题。提前致谢。 (我曾想过在外表中逐一添加数据并进一步使用外键,但我想这是一个坏主意。)
答案 0 :(得分:0)
您在MaterialLineEntry中有外键“OrganizationId”。要重新使用现有组织,您必须仅为OrganizationId分配一个exisitng id。 e.g。
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();