entity framework多对多插入

我有三张桌子。 命名:Merchants,MerchantNumberX,Numbers(数字由许多其他实体使用 – 这只是一个例子)。

Merchants表看起来像:

MerchantGuid, MerchantName 

Numbers表看起来像:

 NumberGuid, PhoneNumber 

外部参照表如下所示:

 MerchantGuid, NumberGuid 

我知道在entity framework中我可以这样做:

 var newNumber = new Number { NumberGuid = Guid.NewGuid(), PhoneNumber = "55555555555" }; Merchants.Numbers.Add(newNumber); 

这将把关系插入到两个表实体之间的Xref表中。 但是,有没有其他方法将这些表“关联”在一起而没有商家对象?

例如:

  var newNumber = new Number { NumberGuid = Guid.NewGuid(), PhoneNumber = "4444444444" }; newNumber.MerchantGuid = alreadyKnownMerchantGuid; // This is not available, by the way, just an example of something we are looking for in a many-to-many relationship. 

但是,newNumber给了我一个“商家”属性,它只是递归重复。

我们正在重写大量代码,并想知道是否有一种快速的方式来建立这种关系,而不必调用数据库来获取Merchant对象,因为我们已经有了有效的MerchantGuid。

有人帮这个吗?

但是,有没有其他方法将这些表“关联”在一起而没有商家对象?

与EF的多对多关系是独立关联,这意味着您的模型中没有可用的外键属性。 您需要使用两个集合来操纵关系。 这是唯一的方法。

但是,请看下一点……

…如果有一个快速的方法来建立这种关系,而不必调用数据库来获取Merchant对象,因为我们已经有了有效的MerchantGuid。

要创建关系,您无需从数据库加载现有的Merchant实体。 您可以创建一个“stub”实体,并将key属性设置为有效的MerchantGuid ,然后将其附加到上下文中。 对于EF,这是一个状态为Unchanged的实体,其行为就像从数据库加载一样:

 var newNumber = new Number { NumberGuid = Guid.NewGuid(), PhoneNumber = "55555555555" }; var merchant = new Merchant { MerchantGuid = alreadyKnownMerchantGuid, Numbers = new HashSet() }; context.Merchants.Attach(merchant); merchant.Numbers.Add(newNumber); context.SaveChanges(); 

这里没有涉及数据库查询。 SaveChanges将在连接表中创建一个新的Number记录和一个新的关系记录。