1

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")

これにより、複数選択リストボックスにカテゴリが正しく表示されます。しかし、今回商品を保存すると、カテゴリが商品に自動的に関連付けられず、商品にカテゴリがなくなります。

これを正しく機能させる方法を知っている人はいますか?

4

0 に答える 0