0

我是 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(在本例中为描述列)。

请帮我解决这个问题。提前致谢。(我曾想过将外表中的数据一一添加,并进一步使用外键,但我想这是个坏主意)。

4

1 回答 1

0

You have foreignkey "OrganizationId" in the MaterialLineEntry. To resuse a existing Organization you have to assign an exisitng id to OrganizationId only. e.g.

report. materilaLineEntries.Add(new MaterialLineEntry()
            {
                EntryNumber=1,
                OrganisationID=0,//Id of a exsiting organization

            });

EDIT : Full code

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();
于 2013-07-08T19:37:57.883 回答