2

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(); 
} 

Antwort

2

nicht manuell StandardId fügen Sie, dies tun:

using (MyDbContext ctx = new MyDbContext()) 
{ 
    Standard std = new Standard(); 

    Student stud = new Student() 
    { 
     StudentName = "John", 
    }; 

    stud.Standard = std; 

    ctx.Student.Add(stud); 
    ctx.SaveChanges(); 
} 

EF nehmen Pflege von t er Beziehung.

+1

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

+0

Meinst du auch mit EF noch jeden Eintrag durchlaufen zu müssen und den Originalzustand zu vergleichen und manuell zu verändern? – KMC

+0

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

Verwandte Themen