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; }
}
と の間には 1 対多の関係が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
あり、代わりにそれを使用して製品を DB 内の既存のストアに関連付けます。これはすべて非常にうまく機能し、魔法のように簡単です。
私の質問は、多対多の関係にも同じ既製の動作を適用することは可能ですか? Product.CategoryIds
私は新しいリストを作成しようとしましたが、同じパターンを使用しました:
コントローラ
ViewBag.CategoryIds = new SelectList(db.Categories, "Id", "Name");
意見
@Html.ListBox("CategoryIds")
これにより、複数選択リストボックスにカテゴリが正しく表示されます。しかし、今回商品を保存すると、カテゴリが商品に自動的に関連付けられず、商品にカテゴリがなくなります。
これを正しく機能させる方法を知っている人はいますか?