实体框架基础知识

时间:2012-10-08 04:47:25

标签: entity-framework

我在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必须认为我添加的合作伙伴是新记录吗?

我在这里缺少什么?

1 个答案:

答案 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 });
}