Ich verwende Code-zuerst, um die Datenbank und Daten zur Laufzeit zu generieren.Einfügen von Daten in die Datenbank mit FK-Relation
Meine zwei Klassen/Modelle haben eine Eins-zu-viele-Beziehung. Da ein FK nicht null sein kann, füge ich zuerst einen Standard ein, bevor ich einen Student einfüge, und ich gebe auch manuell die FK ID ein. Aber ich bekomme immer noch System.NullReferenceException
und ich kann einfach nicht verstehen warum?
Ich habe versucht zu googeln, aber ich kann nicht verwandten Artikel zum Einfügen von Daten mit Fremdbezug von Grund auf Code-zuerst finden.
Meine Entity Klasse/Model
public class Student {
public Student() { }
public int StudentID { get; set; }
public string StudentName { get; set; }
public int StandardId { get; set; } // FK StandardId
public Standard Standard { get; set; } }
public class Standard {
public Standard() { }
public int StandardId { get; set; }
public string StandardName { get; set; }
public ICollection<Student> Students { get; set; } }
Mein Haupt
using (MyDbContext ctx = new MyDbContext())
{
Standard std = new Standard();
ctx.Standards.Add(std);
ctx.SaveChanges(); // Database already has a StandardID = 1
Student stud = new Student()
{
StudentName = "John",
StandardId = 1 // I even manually type in the FK
};
ctx.Student.Add(stud); // I still get 'System.NullReferenceException'
ctx.SaveChanges();
}
Ich stimme zu, die Entitäten nicht separat hinzufügen, aber seien Sie vorsichtig, wenn Sie versuchen, die zugehörigen Tabellen unter Ihrer Root-Entität zu aktualisieren. Es ist anders als "Hinzufügen" -Operation. Für das Update müssen Sie über Ihren gesamten Baum iterieren und sie modifizieren oder sie anhängen. – Deniz
Meinst du auch mit EF noch jeden Eintrag durchlaufen zu müssen und den Originalzustand zu vergleichen und manuell zu verändern? – KMC
Für skalare Typen müssen Sie sich keine Sorgen machen. Werfen Sie einen Blick auf http://www.entityframeworktutorial.net/Types-of-Entities.aspx für Entitätstypen. Für Navigationseigenschaften müssen Sie diese jedoch separat verwalten, wenn Sie mit freistehenden Objekten arbeiten (soweit ich weiß, sind Updates willkommen). – Deniz