2017-11-02 2 views
3

Ich habe eine Elternklasse, Parent, die eine Eins-zu-Eins-Beziehung mit einer Kindklasse, Kind, hat.Instanz von Parent mit eins-zu-eins Kind hinzufügen

Wenn ich ein neues Parent hinzufüge, möchte ich gleichzeitig ein Child zum Parent hinzufügen.

Hier sind meine Klassen:

public class Parent 
{ 
    public virtual int Id { get; } 
    public virtual Child Child { get; set; } 
} 

public class Child 
{ 
    public virtual int Id { get; } 
    public virtual Parent Parent { get; set; } 
} 

ich NHibernate und die hasOne/one-to-one-Mappings hier skizzierte bin mit: https://github.com/jagregory/fluent-nhibernate/wiki/Fluent-mapping

Unten ist der Code aus meinem Griff() -Methode in mein AddParentRequestHandler:

var parent= new Parent(); 

var child = new Child() 
{ 
    Parent = parent; 
}; 

parent.Child = child; 

session.Save(parent); 

Wenn dies ausgeführt wird, ich die folgende Fehlermeldung erhalten: Der Wert NULL kann nicht in die Spalte 'ChildId' eingefügt werden, Tabelle 'dbo.Parent'; Spalte erlaubt keine Nullen. INSERT fehlgeschlagen.

ChildId für Parent und ParentId für Child sind beide Felder, die keine Nullwerte enthalten können.

Gibt es eine Möglichkeit, dies zu beheben und diese Felder trotzdem nicht NULL-fähig zu halten? Vielen Dank im Voraus.

+2

Sollte nicht die zweite Klasse Kind sein? – Shirkam

+0

Ja. Korrigiert. Vielen Dank. – Sheppy

Antwort

0

Ich musste 2 Dinge tun, um dieses Problem zu lösen.

Zuerst habe ich die ChildId-Spalte aus der übergeordneten Tabelle im Schema entfernt.

Dann zog ich die session.Save über dem Code, wo ich das Kind zuweisen:

var parent= new Parent(); 

session.Save(parent); 

parent.Child = new Child 
{ 
    Parent = parent; 
}; 

So, jetzt habe ich keine Nullable-ID-Felder und ein Elternteil mit einem Kind bestehen bleiben kann.

0

When I add a new Parent, I want to add a Child onto the parent at the same time.

Alles, was Sie tun müssen, ist speichern ein ‚Kind‘ Objekt als Variable in der ‚Eltern‘ Klasse und erstellen Sie eine neue Instanz von ‚Kind‘ in den ‚Eltern‘ Konstruktor

private Child child; 

public Parent(){ 
    ... 
    child = new Child(); 
} 
Verwandte Themen