Ich bin neu in EF und in meinem Code erstes Modell, das ist meine Lokalität Klasse:Füllung Navigationseigenschaft?
public class Locality : ILocality
{
public int ID { get; set; }
[Required]
[MaxLength(150)]
[Display(Name = "Locality")]
public string Description { get; set; }
}
Das ist meine Schulklasse, die ich über eine Navigationseigenschaft Ort haben, und es ist eine 1-1-Beziehung:
public class School : ISchool
{
public int ID { get; set; }
[Required]
[MaxLength(150)]
[Display(Name = "School")]
public string Description { get; set; }
[Required]
[Display(Name = "Locality")]
public int LocalityID { get; set; }
public virtual ILocality Locality { get; set; }
}
Gerade jetzt in meiner Schule Controller meine Lösung, die ich habe, ist, wie die folgende:
public ActionResult SchoolList()
{
var allschools = schools.GetAll();
foreach (var school in allschools)
{
school.Locality = localities.GetById(school.LocalityID);
}
return View(allschools);
}
Meine Frage ist, dass, wenn ich brauche, um die Navigation prop zuzugreifen erty Ort und ich muss immer oben sonst der Code füllen verwendet, wird sie null sein:
foreach (var school in allschools)
{
school.Locality = localities.GetById(school.LocalityID);
}
ich gelesen, dass Navigationseigenschaft automatisch gefüllt werden soll, wenn ein Fremdschlüssel Setup ist? Wenn ja, wie mache ich das?
Vielen Dank @Slava, ich kann jetzt sehen, wenn die Tabelle erstellt wird, verwenden Sie LocalityID automatisch als Fremdschlüssel jetzt. Wie aber kann ich jetzt im List-Controller darauf zugreifen? Ich erhalte einen Fehler in der Listenansicht "Zu diesem Befehl gehört bereits ein offener DataReader, der zuerst geschlossen werden muss." wenn es zu @ Html.DisplayFor geht (ModelItem => item.Locality.Description) –
Es passiert, weil Sie Elemente, dann Kontext wurde geschlossen und dann versuchen Sie, Locality-Eigenschaft zu erhalten, aber der Kontext wurde bereits geschlossen. Um es zu beheben, sollten Sie 'Locality' -Eigenschaft explizit durch eifriges Laden laden:' var allschools = context.schools.Include (x => x.Locality) .ToList(); ' –
Vielen Dank @Slava! –