我在ASP.NET MVC4应用程序中使用EF5 codefirst。我有产品和合作伙伴,可以将许多合作伙伴分配到产品中。
在Product实体中,我有: public ICollection Partners {get;组; }
在合作伙伴实体中我有这个: public ICollection Product {get;组; }
因此,在我的sql server中,首先通过代码创建一个PartnerProducts多2个表。
然后我有这个动作方法:
public ActionResult AssignPartner(long productId, long partnerId) {
var product = productRepository.Find(productId);
var partner = partnerRepository.Find(partnerId);
if (product.Partners == null) {
product.Partners = new List<Partner>();
}
product.Partners.Add(partner);
productRepository.Save();
return RedirectToAction("Edit", new{ Id = productId });
}
但结果是创建了新的PartnerProducts行(ok),并且还在Partners表中创建了新的合作伙伴?不知何故,EF必须认为我添加的合作伙伴是新记录吗?
我在这里缺少什么?
答案 0 :(得分:1)
试试这个:
public ActionResult AssignPartner(long productId, long partnerId)
{
var product = productRepository.Find(productId);
var partner = partnerRepository.Find(partnerId);
// Using Attach - partner will be in state Unchanged in the context
dbContext.Partners.Attach(partner);
if (product.Partners == null)
{
product.Partners = new List<Partner>();
}
product.Partners.Add(partner);
productRepository.Save();
return RedirectToAction("Edit", new{ Id = productId });
}