どういうわけか、ASP.NET MVCで開発するようになった訳ですが、はまったことをmemo
そもそも、まだ使い始めて1週間ぐらいなので、全然意味分からないままやってます。
なので、そういう前提で。
画像入れればわかりやすいけど、とりあえずmemoレベルで
「商品テーブル」と「商品価格テーブル」があって、One Manyのリレーションシップを作る
既存のアプリからの移行で、既存のDBはそれぞれ商品ID(主キー)、商品名と、
商品価格ID(主キー)、商品ID(外部キー)、販社ID、仕入価格がある。
その状態で、ASP.NET MVCのUpdateModelを使い、一度に両方のテーブルを更新しようとすると失敗する。
いろいろ調べたけど、解決策が見つからず、UpdateModelを使わずにちまちまフィールドごとに代入すると
問題無く動く。(結局のところ、商品価格テーブルの主キーが重複するとかそういう感じ)
で、そもそもテーブルの構造がいまいちじゃないかと思い、商品価格テーブルの方の主キーを商品IDと販社IDの
複合キーにしてみた。
そうすると、UpdateModelで問題無く更新できる。
コントローラ
[HttpPost] [ValidateAntiForgeryToken] public ActionResult Index(Test01.Models.Product model) { var db = new Test01.Models.MyContext(); var product = db.Products.Find(model.ProductID); UpdateModel(product); db.SaveChanges(); return RedirectToAction("Index", new { id = model.ProductID }); }
モデル
public class Price { [Key] [Column(Order = 0)] public int ProductID { get; set; } [Key] [Column(Order = 1)] public int SupplierID { get; set; } public decimal ProductPrice { get; set; } public virtual Product Product { get; set; } } public class Product { [Key] public int ProductID { get; set; } public string ProductName { get; set; } public virtual IList<Price> Prices { get; set; } }