私は Entity Framework 5 と MVC 4 を使用しており、.NET 4.5 では Code First の移行を使用しています。1 対 0 または 1 の関係にある 2 つのエンティティ間に外部キーがあります。Jogger のレコードを作成しようとすると、すべてが失敗します。次のいずれかのエラー メッセージが表示されます。
- 外部キーが null 参照です
- dbo.Jogger が存在しません
- 未処理の例外 ... メタデータがありません。
EF Viewer を実行すると、ナビゲーション関係は完璧です。現在、Fluent API コードは使用されていません。
ユーザークラス
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
// Other properties
public int? JoggerId { get; set; }
public virtual Jogger Jogger { get; set; }
ジョガークラス
[ForeignKey("UserId")]
public int JoggerId { get; set; }
public virtual UserProfile UserId { get; set; }
JoggerController が生成されると、Get メソッドと Post メソッドに対して次のコードが生成されます。
// GET: /Jogger/Create
public ActionResult Create()
{
ViewBag.JoggerId = new SelectList(db.UserProfiles, "UserId", "UserName");
return View();
}
//
// POST: /Jogger/Create
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Jogger jogger)
{
if (ModelState.IsValid)
{
db.Jogger.Add(jogger);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.JoggerId = new SelectList(db.UserProfiles, "UserId", "UserName", jogger.JoggerId);
return View(jogger);
}
Jogger/Create ビューには、生成されたコードによると、JoggerId または UserId のフィールドはありません。
通常、出力が JoggerId = 0 および UserId = null を示すコードの (ModelState.IsValid) 部分で失敗します。
この動作は、asp.net の Web サイトにある Contoso University のチュートリアルでは見たことがなく、MSDN Learn EF サイトも確認しました。この問題を解決できないようです。あなたのアドバイスをいただければ幸いです。