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
记录和一个新的关系记录。