如何在视图中处理多对多关系,以便Entity Framework 4.3自动保持关系?

时间:2012-08-18 12:41:06

标签: c# entity-framework asp.net-mvc-4 entity-framework-4.3

假设我宣布了三个实体:

产品

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

StoreProduct之间存在一对多关系,ProductCategory之间存在多对多关系。

我正在尝试创建一个新的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创建时,实体框架足够聪明,可以在保存产品时忽略Product.StoreId,而是使用它将产品与数据库中的现有商店相关联。这一切都非常好,并且几乎是多么神奇。

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

控制器

ViewBag.CategoryIds = new SelectList(db.Categories, "Id", "Name");

视图

@Html.ListBox("CategoryIds")

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

有谁知道如何正常工作?

0 个答案:

没有答案