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?
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
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).
Tags und Links orm nhibernate fluent-nhibernate