NHibernate Verbundene Unterklasse in separaten Assemblys

8

Ich habe folgende Lösungsprojektstruktur:

  

Application.Core.Entities

     

Application.Xtend.CustomerName.Entities

Im Core-Projekt habe ich eine Entität Kunde defiend. Im XTend-Projekt habe ich eine Entität definiert, die die Unterklassen Kunde xCustomer (aus Mangel an einem besseren Namen zu diesem Zeitpunkt ...) definiert.

Die Idee hier ist, dass wir ein Core-Domain-Modell in unserer Anwendung haben. Ein Kunde kann dann eine neue Assembly erstellen, die Erweiterungen für unser Kernmodell enthält. Wenn die Erweiterungsbaugruppe vorhanden ist, gibt eine intelligente IRepository -Klasse stattdessen eine Unterklasse der Hauptklasse zurück.

Ich versuche, diese Beziehung in NHibernate abzubilden. Mit Fluent NHibernate konnte ich diese Zuordnung erstellen:

%Vor%

Aber NHib löst den folgenden Fehler aus:

  

NHibernate.MappingException:   persistente Klasse   Application.Entites.xCustomer,   Application.Core.Entites nicht gefunden   --- & gt; System.TypeLoadException: Der Typ konnte nicht geladen werden   'Application.Entites.xCustomer' aus   Assembly 'Application.Core.Entites,   Version = 1.0.0.0, Kultur = neutral,   PublicKeyToken = null '..

Was Sinn macht xCustomer ist nicht in der Core-Bibliothek definiert.

Ist es möglich, verschiedene Baugruppen so zu überspannen? Komme ich das Problem falsch an?

    
NotMyself 03.11.2008, 20:47
quelle

2 Antworten

7

Ich habe dieselbe Frage auf der NHibernate Users-Mailingliste gestellt und die Lösung war so offensichtlich, dass es mir etwas peinlich ist, dass ich sie nicht sehen konnte.

Die Hibernate-Mapping-Attribute Assembly und Namespace sind bequeme Abkürzungen, mit denen Sie Ihre Klassennamen nicht vollständig qualifizieren müssen. Auf diese Weise können Sie eine gute Markierung erzielen, aber das name-Attribut von Klassen- und verbundenen Unterklassenelementen kann auch einen vollständig qualifizierten Assemblynamen enthalten.

So kann die obige gebrochene Zuordnungsdatei wie folgt fixiert werden:

%Vor%

Das funktioniert so, wie ich es erwartet habe. Also schaute ich mir die Fluent-NHibernate-Quelle an und erstellte einen Patch mit Arbeitseinheitstests, um das Problem zu beheben, und übermittelte es dem Projekt .

Danke für deine Hilfe @David Kemp

    
NotMyself 04.11.2008, 16:45
quelle
3

Sie müssen das Attribut extends des Elements <class> zuordnen (AFAIK, das ist neu in NHibernate 2.0). Dann können Sie Ihre Unterklassenzuordnung ( .hbm.xml ) in der XTend Assembly haben.

Sie müssen möglicherweise AddAttribute / AddProperty verwenden (kann sich nicht erinnern, wie es heißt), um dies mit Fluent NHibernate zu tun. (Oder senden Sie einen Patch).

    
David Kemp 04.11.2008 13:04
quelle