假设我声明了三个实体:
产品
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public int StoreId { get; set; }
public Store Store { get; set; }
public List<Category> Categories { get; set; }
}
店铺
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; }
}
和之间是一对多的关系,Store
和之间Product
是多对多的关系。Product
Category
我正在尝试创建一个新的Product
. 在控制器中,我声明:
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")
并且所有商店的下拉菜单都会正确地向用户显示。在 POST 创建时,Entity Framework 足够聪明,可以Product.StoreId
在保存产品时忽略它,而是使用它将产品与数据库中的现有商店相关联。这一切都非常有效,而且它的简单程度几乎是神奇的。
我的问题是,是否也可以对多对多关系应用相同的开箱即用行为?我尝试创建一个新Product.CategoryIds
列表,然后使用相同的模式:
控制器
ViewBag.CategoryIds = new SelectList(db.Categories, "Id", "Name");
看法
@Html.ListBox("CategoryIds")
这将在多选列表框中正确显示类别。但是,当我这次保存产品时,类别不会自动与产品关联,并且产品最终没有任何类别。
有谁知道如何使它正常工作?