1

ASP.NETMVC4アプリでEF5コードファーストを使用しています。製品とパートナーがあり、多くのパートナーを製品に割り当てることができます。

Productエンティティには、次のものがあります。public ICollection Partners {get; セットする; }

そして、パートナーエンティティには次のものがあります。publicICollection Product {get; セットする; }

したがって、私のSQLサーバーでは、PartnerProductsmany-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行が作成され(ok)、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 に答える