Tôi đang sử dụng Entity Framework 5 và MVC 4, với .NET 4.5 sử dụng di chuyển Code First. Tôi có chìa khóa nước ngoài giữa hai thực thể trong mối quan hệ 1 hoặc 0 hoặc 1. Khi tôi cố gắng để tạo ra kỷ lục cho tất cả mọi thứ Jogger thổi lên. Tôi nhận được thông báo lỗi mà là một trong hai:Chỉ định UserId cho khóa ngoài = null
- Ngoại Key là một tham chiếu null
- dbo.Jogger không tồn tại
- Unhandled ngoại lệ ... không có siêu dữ liệu.
Khi tôi chạy Trình xem EF, các mối quan hệ điều hướng là hoàn hảo. Không có mã API Fluent nào được sử dụng tại thời điểm này.
tài Lớp
[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; }
Jogger Lớp
[ForeignKey("UserId")]
public int JoggerId { get; set; }
public virtual UserProfile UserId { get; set; }
Khi JoggerController được tạo ra nó tạo ra mã này cho Nhận và phương pháp mới gởi:
// 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);
}
Trong giao diện Jogger/Create không có trường cho JoggerId hoặc UserId theo mã được tạo ra.
Thông thường nó không thành công trên phần (ModelState.IsValid) mã nơi Đầu ra hiển thị JoggerId = 0 và UserId = null.
Tôi chưa thấy hành vi này trên hướng dẫn của Đại học Contoso trên trang web của asp.net và tôi cũng đã xem trang web MSDN Learn EF. Tôi không thể giải quyết vấn đề này. Lời khuyên của bạn được đánh giá cao.
Cảm ơn @Moeri Tôi đã thực hiện các thay đổi bạn đã đề xuất trong nửa đầu sử dụng PublicProfile UserProfile UserProfile) nhưng vẫn cho tôi lỗi tương tự trên (Model is Valid). JoggerId được đặt thành 0 khi Add không thành công. – Springbokkie
Tôi tự hỏi nếu có điều gì đó về cơ bản thiếu sót với giải pháp của tôi vì ngay cả khi tôi nhập thủ công các giá trị cơ sở dữ liệu cho Id người dùng trong bảng Jogger nó vẫn giết mô hình chỉ xem bản ghi Jogger được nhập theo cách thủ công. – Springbokkie