繁体   English   中英

EF:如何重用新创建的外键

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM