Die Frage sagt wirklich alles, die Standardeinstellung ist, dass es als ein zugeordnet wird, string
aber ich brauche es, um es als zuzuordnen int
.
Ich verwende derzeit PersistenceModel
zum Festlegen meiner Konventionen, wenn dies einen Unterschied macht. Danke im Voraus.
Update Ich habe festgestellt, dass das Aufrufen der neuesten Version des Codes aus dem Trunk meine Probleme gelöst hat.
nhibernate
fluent-nhibernate
Garry Shutler
quelle
quelle
Antworten:
Die Art und Weise, diese Konvention zu definieren, hat sich vor einiger Zeit geändert.
quelle
Wie bereits erwähnt, brachte mich die neueste Version von Fluent NHibernate aus dem Kofferraum, wo ich sein musste. Eine Beispielzuordnung für eine Aufzählung mit dem neuesten Code lautet:
Der benutzerdefinierte Typ erzwingt, dass er als Instanz der Aufzählung behandelt wird, anstatt die zu verwenden
GenericEnumMapper<TEnum>
.Ich denke tatsächlich darüber nach, einen Patch einzureichen, um zwischen einem Enum-Mapper, der eine Zeichenfolge beibehält, und einem, der ein Int beibehält, wechseln zu können, da dies etwas zu sein scheint, das Sie als Konvention festlegen sollten.
Dies tauchte in meiner letzten Aktivität auf und in den neueren Versionen von Fluent NHibernate haben sich die Dinge geändert, um dies zu vereinfachen.
Um alle Aufzählungen als Ganzzahlen zuzuordnen, können Sie jetzt eine Konvention wie folgt erstellen:
Dann muss Ihr Mapping nur noch sein:
Sie fügen die Konvention wie folgt zu Ihrer Fluent NHibernate-Zuordnung hinzu.
quelle
Vergessen Sie nicht nullbare Aufzählungen (wie
ExampleEnum? ExampleProperty
)! Sie müssen separat geprüft werden. So wird es mit der neuen Konfiguration im FNH-Stil gemacht:quelle
int
? Und wann akzeptiert der Typ Flags? Wie:MyEnum.Active | MyEnum.Paused
So habe ich eine enum-Eigenschaft mit einem int-Wert zugeordnet:
funktioniert bei mir!
quelle
Für Benutzer von Fluent NHibernate mit Automapping (und möglicherweise einem IoC-Container):
Das
IUserTypeConvention
ist wie @ Julien ‚s Antwort oben: https://stackoverflow.com/a/1706462/878612Die Konfiguration von Fluent NHibernate Automapping kann folgendermaßen konfiguriert werden:
* Dann
CreateSessionFactory
kann das problemlos in einem IoC wie Castle Windsor (mit PersistenceFacility und Installer) verwendet werden. * *quelle
Sie können ein NHibernate erstellen
IUserType
und esCustomTypeIs<T>()
in der Eigenschaftskarte angeben .quelle
Sie sollten die Werte als int / tinyint in Ihrer DB-Tabelle beibehalten. Um Ihre Aufzählung zuzuordnen, müssen Sie die Zuordnung korrekt angeben. Bitte sehen Sie unten Mapping und Enum-Beispiel,
Mapping-Klasse
Aufzählung
quelle