Używam Entity Framework 5 i MVC 4, z .NET 4.5 przy użyciu migracji First Code. Posiadam klucze obce między dwiema jednostkami w relacji 1 do zera lub 1. Kiedy staram się stworzyć płytę dla Joggera, wszystko się wysadza. Otrzymuję komunikaty o błędach, które są albo:Przypisywanie identyfikatora użytkownika do klucza obcego = null
- klucz obcy jest zerowy odniesienia
- dbo.Jogger nie istnieje
- nieobsługiwany wyjątek ... bez metadanych.
Po uruchomieniu przeglądarki EF, relacje nawigacji są doskonałe. W tej chwili nie jest używany żaden kod Fluent API.
Class User
[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 Klasa
[ForeignKey("UserId")]
public int JoggerId { get; set; }
public virtual UserProfile UserId { get; set; }
Gdy JoggerController są generowane go produkuje ten kod dla uzyskania i Metod 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);
}
W widoku Jogger/Create nie ma pól dla JoggerId lub UserId zgodnie z wygenerowanym kodem.
Zazwyczaj kończy się niepowodzeniem w części kodu (ModelState.IsValid), w której wynik wskazuje wartość JoggerId = 0 i UserId = null.
Nie widziałem tego zachowania na tutorialu Uniwersytetu Contoso na stronie internetowej asp.net i przyjrzałem się także witrynie MSDN Learn EF. Nie mogę rozwiązać tego problemu. Twoja rada jest doceniana.
Dzięki @Moeri Zrobiłem zmiany, które zasugerowałeś w pierwszej połowie, używając publicznego wirtualnego UserProfile UserProfile), ale nadal dałeś mi ten sam błąd (Model jest prawidłowy). Identyfikator JoggerId jest ustawiony na 0, gdy Add nie powiedzie się. – Springbokkie
Zastanawiam się, czy coś jest wadliwego z moim rozwiązaniem, ponieważ nawet gdy ręcznie wprowadzę wartości bazy danych dla ID użytkownika w tabeli Jogger, nadal zabije model oglądając ręcznie wprowadzony rekord Jogger. – Springbokkie