2009-07-19 4 views
3

ich die folgende Klasse haben:Nhibernate: QuerySyntaxException: 'Klasse' ist nicht abgebildet

public class MyClass 
{ 
    private List<long> _myList = new List<long>(); 

    public virtual string MyID { get; set; } 

    public virtual string MyData 
    { 
     get 
     { 
      return SomeStaticClass.Serialize(_myList); 
     } 
     set 
     { 
      _myList = SomeStaticClass.Deserialize<List<long>>(value); 
     } 
    } 

    public virtual List<long> MyList 
    { 
     get { return _myList; } 
    } 
} 

Und die folgende Zuordnungsdatei:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
       assembly="MyNamespace" 
       namespace="MyNamespace"> 
    <class name="MyNamespace.MyClass" table="MY_TABLE"> 
    <id name="MyID" column="MY_ID" type="System.String"> 
     <generator class="assigned"></generator> 
    </id> 
    <property name="MyData" column="MY_DATA"></property> 
    </class> 
</hibernate-mapping> 

Wenn ich versuche, die folgende Zeile auszuführen:

session.Delete("From MyClass m"); 

Ich erhalte eine QuerySyntaxException mit der Nachricht "MyClass ist nicht zugeordnet [From MyClass s]".

Als ich den Namen des „MyID“ Feld ändern zu „ID“ in der Zuordnungsdatei, wird die Ausnahme

NHibernate.PropertyNotFoundException: Es konnte kein Getter für Eigenschaft ‚ID‘ in der Klasse ‚MyNamespace finden. Meine Klasse'.

Ich nehme an, es kann die Zuordnungsdatei finden. Ich stellte sicher, dass die Mapping-Datei eine eingebettete Ressource ist, checked und dobule prüfte die Namensraum- und Klassennamen in der Mapping-Datei. Was kann den Fehler verursachen? Ich denke, es kann sich auf die MyList-Eigenschaft beziehen, die nicht zugeordnet ist, aber ich bin nicht sicher, da ich non-mapped Eigenschaften auf meinen anderen Klassen ohne ein Problem verwende.

EDIT: Ich habe versucht, diese Klasse mit einer Klasse überschreiben, die keine "MyData" -Eigenschaft und Neudefinition "MyList" -Eigenschaft als Zeichenfolge hat. Ich erhalte immer noch den gleichen Fehler für meine überschriebene Klasse.

EDIT 2: Versucht mit einer sehr einfachen Klasse mit den gleichen Eigenschaftsnamen mit den gleichen Rückgabetypen und nur einfache erhalten; einstellen; Blöcke. Ich bekomme immer noch den gleichen Fehler. Ich bin mir fast sicher, dass Nhibernate meine Mapping-Dateien sehen kann, denn wenn ich den Namen einer einzelnen Eigenschaft ändere, gibt es mir PropertyNotFound anstelle von "class in not mapped".

+0

Vielleicht nicht sehr hilfreich, aber haben Sie überprüfen, ob Ihr Eigenschaftsnamen die gleiche wie die in der Mapping-Datei ist? Beachten Sie, dass Eigenschaftsnamen die Groß-/Kleinschreibung beachten. –

+0

Danke, ich habe alle ein Dutzend Mal überprüft, danach kopiere ich sie wieder und überprüfe noch einmal ein Dutzend Mal. –

+0

Wenn ich einen Fehler similiar dazu erhalten fand ich, dass [diese] (http://www.thebestcsharpprogrammerintheworld.com/blogs/Nhibernate-QuerySyntaxException-is-not-mapped-from.aspx) war die Ursache. Ich habe viele Artikel über NHibernate geschrieben [http://www.thebestcharpprogrammerintheworld.com/archiveList.aspx?TAG=NHibernate]. Ich hoffe, dass dieser das Problem löst und die anderen Artikel helfen. – Benjamin

Antwort

0

Es scheint ein bisschen komisch, dass Sie den Namespace zweimal in der Mapping-Datei angeben. Ich würde versuchen, nur den Attributnamen Angabe nur als „MyClass“ statt „MyNamespace.MyClass“ so ist es

<class name="MyClass" table="MY_TABLE"> 
+0

Ich weiß nicht, ob du oder meins besser bist, aber ich kartiere immer so und hatte bis heute keine Probleme. Habe auch deinen Vorschlag ausprobiert, aber das Problem geht weiter. –

8

wäre Wie werden Sie die HBMs Laden? Wenn sie Ressourcen sind, stellen Sie sicher, Sie haben festgelegt tatsächlich die Dateien in Visual Studio eingebettete Ressourcen werden

+0

Ich bin sicher, dass sie korrekt auf eingebettete Ressourcen eingestellt sind, und ich erwähnte es bereits in der Frage. –

+0

War das gleiche Problem. Ich habe vergessen, meine gbm-Mapping-Datei auf die eingebettete Ressource zu setzen! +1 –

5

was ist, wenn Sie

session.Delete("From MyNamespace.MyClass m"); 

verwenden war ich gerade am HQL Referenz suchen und bemerkte in ihrer Katze Zum Beispiel verwenden sie voll qualifizierte Objekte, zB Eg.Cat.

+0

Immer noch der gleiche Fehler. –

+1

dies löste das ähnliche Problem, das ich hatte ... –

+0

Dies löste ein ähnliches Problem auch. Wenn ich Auto-Import auf false gesetzt auf meinen hbm.xml Klassen hatte ich den Namespace in der Löschfunktion – burnt1ce

1

Ich hatte dieses Problem. Ich habe vergessen, hbm im Namen der Zuordnung von XML-Dateien zu setzen.

3

Stellen Sie sicher, dass "Build Aktion der Datei" "Embedded Resource" ist.

5

Bei Mapping

<class name="MyClass" table="MY_TABLE"> 

Sie sollten zum Beispiel verwenden:

session.CreateQuery("from MyClass") 

aber nicht:

session.CreateQuery("from MY_TABLE") 
3

Sie die Verbindung stehendes Set sollte * .hbm.xml als Eingebettete Ressource.

1]

+0

es stört mich soooooooo sehr, dass das was ich vermisste. –

Verwandte Themen