所以我有两个表,A和B.每个表都设置如下:
A: ItemAId, ItemAProperty1, ItemAProperty2, etc.
B: ItemBId, ItemBProperty1, ItemBProperty2, etc.
我在表A中有记录,在表B中有记录。这些记录彼此没有任何关系。
我有第三张桌子,C设置如下:
C: ItemAId, ItemBId
我想从表A和B中的现有记录在表C中创建一条新记录。使用intellisense不能使用C语言。在我看过的每个地方,建议是从A已经存在的对象构建一个对象,从B已经存在的对象,将B添加到A(反之亦然),然后执行添加...并且因为对象已经存在于数据库中,EF只会进行更新并将对象链接在中间表中。 (来自Insert/Update Many to Many Entity Framework . How do I do it?)I.E。:
/**** 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吗?
答案 0 :(得分:0)
所以,正如我从挖掘更多的东西中发现的......
尽管ItemA和ItemB之间没有直接关系,但似乎存在包含主ID的链接表的事实导致ItemB对象内的ItemA的ICollection,反之亦然。因此,为了让它工作,我真正需要做的就是获得我想要链接的两个对象,将一个对象添加到另一个对象的集合中,并进行添加。实际(模仿)代码如何工作:
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();
}
当然,如果已经验证了对象的存在,则第一个()将起作用,并且" item1.ItemBs.Add()"有" ItemBs"因为EF很容易让一切变得多元化。