2009-07-22 8 views
1

Komponenten, denen kein Wert für eine untergeordnete Eigenschaft zugewiesen ist, werden beim Abrufen aus der Datenbank ebenfalls auf null gesetzt.NHibernate-Komponente not-null-Eigenschaft beim Einfügen

Es macht mir nichts aus, es ist einfach eine zusätzliche Überprüfung, ob die Komponente null ist oder nicht. Wenn ich dann versuche, dieses Objekt in die Datenbank mit der Nullkomponente zu aktualisieren oder zu aktualisieren, erhalte ich folgende Fehlermeldung:

"not-null-Eigenschaft verweist auf einen null oder transienten [vollen Eigenschaftsnamen]", was lächerlich erscheint, wie kommt NHibernate werde mir einen NULL geben, aber es wird es selbst nicht akzeptieren.

Gibt es einige Zuordnungsoptionen, die fehlen, um dies zu überschreiben, oder muss ich die Komponente wirklich auf einen Wert setzen, bevor ich sie aktualisiere oder in die Datenbank einfüge?

Dank

Antwort

3

Wenn alle Eigenschaften sind null die Komponente null selbst ist, wenn Sie schreiben, es ist ein normales Verhalten ist.

Wenn Sie von der Datenbank erhalten, wenn Sie eine Auto-Eigenschaft mit einem öffentlichen Setter verwenden, können Sie diese Art von Problem haben.

wenn Sie dies:

public virtual MyComponent MyComponentObject { get; set; } 

Sie haben diese stattdessen zu tun:

private MyComponent _myComponent; 
    public virtual MyComponent MyComponentObject 
    { 
     get 
     { 
      if (ReferenceEquals(null, _myComponent)) 
      { 
       _myComponent= new MyComponent(); 
      } 
      return _myComponent; 
     } 
     set 
     { 
      _myComponent = value; 
     } 
    } 

HTH,

Kris-I,

+0

Ja ich denke, ich tue. Automatische Eigenschaften machen mich wirklich faul, wenn mir das nicht einmal in den Sinn kommt! Danke –

+0

Wenn ich weiß, liegt es daran, dass ich auch faul bin und .... vor einigen Wochen das selbe Problem hatte ;-) –

+1

Es stellt sich tatsächlich heraus, dass es sich bei der Komponente um eine Eigenschaft, jedoch NHibernate, handelte Wann immer es zurückkehrte, beschwerte sich der Fehler über die Komponente und nicht über eine ihrer Eigenschaften. Ich erwähne dies nur für jemand anderen, der diese Frage durchläuft. –