私はMVCプロジェクトを持ち、データベースにEntity Framework Code FirstとPOCOオブジェクトを使用しています。例:Entity Frameworkで関連するエンティティを更新する方法
public class ClassA
{
public int? Id {get; set;}
public string Name { get; set;}
public virtual ClassB B {get; set;}
}
public class ClassB
{
public int? Id {get;set;}
public string Description {get;set;}
}
モデルを作成または編集するActionResultがあります。問題は、このActionResultを呼び出してモデルを更新し、model.B
が変更された場合、その関係はデータベースに保存されません。新しいオブジェクトを作成するためにActionResultが呼び出されると、期待どおりに動作します。これをどうすれば解決できますか?
public ActionResult Save(ClassA model)
{
model.B = GetBFromDb(model.B.Id.Value);
if(ModelState.IsValid)
{
if (id.HasValue)
{
context.Entry(model).State = System.Data.EntityState.Modified;
}
else
{
context.ClassAs.Add(model);
}
context.SaveChanges();
// redirect to index etc.
}
return View("EditForm", model);
}
EFで回避できないギャップと余分なコードを証明する必要があります。さもなければ、それは関係を見ることができません。 FKプロパティではスカラー値であり、EFが複数のプロセス間を追跡するのが簡単です。私は実際にこの正確なトピックについて私の2012年1月Data Pointsコラムを書いた! EFは、FKスカラープロパティを持つときに使用するほうがはるかに簡単です。そうでなければ、 "仕事をする"と期待している多くの機能は、何が起こっているのか、必要な情報をどのように提供するのかをより深く理解することができません。申し訳ありませんが、 –
の前に行方不明のFKが表示されませんでした.JulieLerman、問題ありません、あなたの助けをありがとう! :) – Marthijn