2012-10-08 163 views
1

我在ASP.NET MVC4應用程序中使用EF5 codefirst。我有產品和合作夥伴,並且可以將許多合作伙伴分配給產品。實體框架基礎知識

在產品實體中我有這樣的: public ICollection Partners {get;組; }

而在合作伙伴實體中,我有這樣的: public ICollection Product {get;組; }

因此,在我的sql服務器中,一個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),也是一個新的合作伙伴在合作伙伴表中創建?不知怎的,英孚必須認爲我添加的合作伙伴是新記錄?

我在這裏錯過了什麼?

回答

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