私はEntity Framework 5とMVC 4を使用していますが、.NET 4.5ではCode Firstマイグレーションを使用しています。私は1対0の関係で2つのエンティティの間に外部キーを持っています。ジョガーのためのレコードを作成しようとすると、すべてが爆発する。 dbo.Joggerが UserIdを外部キーに割り当てる= null
- 外部キーがnull参照
- です:私はどちらかのエラーメッセージを取得します。
私が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);
}
ジョガー/作成ビューには、生成されたコードに従ってJoggerIdまたはUserIdのフィールドはありません。
通常、出力でJoggerId = 0およびUserId = nullが表示されるコードの(ModelState.IsValid)部分でエラーが発生します。
Contoso Universityチュートリアルのasp.netのWebサイトでこの動作が見られませんでした。私はMSDN Learn EFサイトも見てきました。私はこの問題を解決できないようです。あなたのアドバイスは高く評価されます。ここで
ありがとう@Moeri前半でpublic virtual UserProfile UserProfileを使用して提案した変更を行いましたが、(Model is Valid)で同じエラーが表示されました。追加が失敗すると、JoggerIdは0に設定されます。 – Springbokkie
JoggerテーブルにUser IDのデータベース値を手動で入力しても、手動で入力されたJoggerレコードを表示するだけでモデルを強制終了するため、根本的に私の解決策に問題があるのだろうかと思います。 – Springbokkie