我正在使用 Entity Framework 5 和 MVC 4,以及使用 Code First 迁移的 .NET 4.5。我在 1 到零或 1 关系中的两个实体之间有外键。当我尝试为 Jogger 创建记录时,一切都崩溃了。我收到以下错误消息:
- 外键是空引用
- dbo.Jogger 不存在
- 未处理的异常...没有元数据。
当我运行 EF 查看器时,导航关系是完美的。目前没有使用 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 字段。
通常,它在代码的 (ModelState.IsValid) 部分失败,其中输出显示 JoggerId = 0 和 UserId = null。
我没有在 asp.net 网站上的 Contoso 大学教程中看到这种行为,我也查看了 MSDN Learn EF 站点。我似乎无法解决这个问题。感谢您的建议。