2010-06-21 10 views
6

Wenn ich versuche, eine Tabelle mit CreateSqlQuery abzufragen und sie in eine Entität mit Formeleigenschaft zu konvertieren, erhalte ich die folgende Adoexception.CreateSqlQuery für Entität mit Formeleigenschaft

„Wert kann nicht null sein Parametername:. Feldname“

In erster Linie ist es möglich, die createsqlquery auf Einheit zu verwenden, die Formel-Mapping hat?

Antwort

7

Es ist möglich, CreateSQLQuery mit Formeln zu verwenden.

Hier ist ein Proof of Concept. Mapping (Klasse ist nicht schwer zu erraten):

<class name="Foo"> 
    <id name="Id"> 
    <generator class="hilo"/> 
    </id> 
    <property name="Data"/> 
    <property name="DataX2" formula="Data * 2"/> 
</class> 

Und hier ist eine Abfrage:

var foos = session.CreateSQLQuery(
        @" 
        select Id   as {foo.Id}, 
          Data  as {foo.Data}, 
          Data + Data as {foo.Data2} 
        from Foo 
        ") 
        .AddEntity("foo", typeof(Foo)) 
        .List<Foo>(); 

Wenn Sie genau hinsehen, werden Sie sehen, dass ich eine andere Formel bin mit als die deklarierten in der Zuordnung. NHibernate erlaubt alles, solange sich alle Eigenschaften in der Abfrage befinden.

Ich schlage vor, dass Sie lesen 17.1.2. Entity queries und die folgenden Punkte.

+0

Ihre Lösung hier scheint nur eine Arbeit zu sein, um zu einem echten Fehler, der vorhanden ist: Aliases muß hier als dokumentiert werden. –

+0

@GaryB Wenn Sie denken, dass es einen Fehler gibt, zögern Sie nicht, ein Problem im Tracker zu öffnen, achten Sie darauf, einen fehlgeschlagenen Komponententest einzuschließen, –

+0

Fair genug. Ich bin nicht vertraut mit der Beziehung zwischen Nhibernate und Hibernate Issue Tracking. Ich behaupte, dass es ein Fehler ist, weil es innerhalb von Hibernate zu einem solchen erklärt wurde, aber anscheinend nicht innerhalb von Nhibernate, daher ist es nicht ganz fair, es einen bezüglich Nhibernate zu nennen. An dieser Stelle bin ich mit der Alias-Lösung zufrieden, daher finde ich es nicht in meinem Interesse, ein Nhibernate-Problem zu erstellen. –

Verwandte Themen