C# 如何处理视图中的多对多关系,以便EntityFramework4.3自动持久化该关系?

C# 如何处理视图中的多对多关系,以便EntityFramework4.3自动持久化该关系?,c#,entity-framework,asp.net-mvc-4,entity-framework-4.3,C#,Entity Framework,Asp.net Mvc 4,Entity Framework 4.3,假设我声明了三个实体: 产品 然后在视图中,我只是简单地添加以下内容: @Html.DropDownList("StoreId") 所有商店的下拉列表都会正确地显示给用户。在创建后,Entity Framework足够聪明,可以在保存产品时忽略Product.StoreId,而是使用它将产品与数据库中的现有存储关联起来。这一切都非常有效,而且它的简单程度几乎是不可思议的 我的问题是,是否有可能对多对多关系应用相同的开箱即用行为?我尝试创建一个新的Product.categoryId列表,然后使

假设我声明了三个实体:

产品 然后在视图中,我只是简单地添加以下内容:

@Html.DropDownList("StoreId")
所有商店的下拉列表都会正确地显示给用户。在创建后,Entity Framework足够聪明,可以在保存产品时忽略Product.StoreId,而是使用它将产品与数据库中的现有存储关联起来。这一切都非常有效,而且它的简单程度几乎是不可思议的

我的问题是,是否有可能对多对多关系应用相同的开箱即用行为?我尝试创建一个新的Product.categoryId列表,然后使用相同的模式:

控制器 看法 这将在多选列表框中正确显示类别。但是,当我这次保存产品时,类别不会自动与产品关联,并且产品最终没有任何类别


有人知道如何使其正常工作吗?

它对Store起作用的原因是您的产品类具有StoreId属性。它没有CategoryId属性。这就是神奇发生的地方。是的,但我在问题中说,我添加了CategoryIds属性,但它不起作用。
public class Store
{
    public int Id { get; set; }
    public string Name { get; set; }

    public List<Product> Products { get; set; }
}
public class Category
{
    public int Id { get; set; }
    public string Name { get; set; }

    public List<Product> Products { get; set; }
}
public ViewResult Create()
{
    ViewBag.StoreId = new SelectList(db.Stores, "Id", "Name");
    return View();
}

[HttpPost]
public ViewResult Create(Product product)
{
    db.Products.Add(product);
    db.SaveChanges();
    return RedirectToAction("Index");
}
@Html.DropDownList("StoreId")
ViewBag.CategoryIds = new SelectList(db.Categories, "Id", "Name");
@Html.ListBox("CategoryIds")