1

我在 ASP.NET MVC4 应用程序中使用 EF5 codefirst。我有产品和合作伙伴,一个产品可以分配多个合作伙伴。

在产品实体中,我有这个: public ICollection Partners { get; 放; }

在合作伙伴实体中,我有这个: public ICollection Product { get; 放; }

因此,在我的 sql server 中,PartnerProducts many-2-many 表是由代码首先创建的。

然后我有这个动作方法:

    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 行(好的),又在 Partners 表中创建了一个新的合作伙伴?不知何故,EF一定认为我添加的伙伴是新记录?

我在这里想念什么?

4

1 回答 1

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 });
}
于 2012-10-08T05:03:49.433 回答