实体框架中间表-使用现有的不相关id插入新记录



我有两个表A和b,每个表是这样设置的:

A: ItemAId, ItemAProperty1, ItemAProperty2, etc.
B: ItemBId, ItemBProperty1, ItemBProperty2, etc.

我在表a中有一条记录,在表b中有一条记录。这些记录彼此之间没有任何关系。

我有第三张表,C设置如下:

C: ItemAId, ItemBId

我想从表a和表b中的现有记录在表C中创建一个新记录。我所看到的任何地方,建议都是根据已经存在的A和已经存在的B创建一个对象,将B添加到A(反之亦然),然后进行添加……因为这些对象已经存在于数据库中,EF将只做一个更新,并在中间表中将这些对象链接在一起。(从插入/更新多对多实体框架。我该怎么做?)例如:

/**** Rough Psuedocode ****/
 var a = context.First(a => a.Id == passedInAId);
 var b = context.First(b => b.Id == passedInBId);
 a.BProperty.Add(b);
 context.Add(a);
 context.SaveChanges()

但是,在这种情况下,对象没有关联它们的属性,所以这不起作用。

我知道我可以写一个存储过程来做到这一点,但是有可能用EF吗?

所以,正如我在进一步挖掘中发现的…

尽管ItemA和ItemB彼此之间没有直接关系,但由于存在一个包含主id的链接表,因此在ItemB对象中产生了ItemA的iccollection,反之亦然。因此,要使它工作,实际上我所需要做的就是,获得我想要链接的两个对象,将其中一个添加到另一个所述对象的集合中,并执行添加操作。它如何工作的实际(模仿)代码是:

using ( var ctx = new Model()) 
{
   var item1 = ctx.ItemA.FirstOrDefault(i => i.Id == itemAId);
   var item2 = ctx.ItemB.FirstOrDefault(j => j.Id == itemBId);
   item1.ItemBs.Add(item2);
   ctx.SaveChanges();
}

当然,如果已经验证了对象的存在,那么First()就可以工作,并且"item1. itemb . add()"具有" itemb ",因为EF有将EVERYTHING复数化的烦人倾向。

最新更新