どういうわけか、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; }
}