2009-05-07 14 views
1

Ich konnte keine Nullable Enum mit NHibernate mit Fluent NHibernate-Konfiguration beibehalten. NHibernate versucht, eine String-Darstellung des Enum zu speichern und erhalte ich die FehlerWie kann ich eine NULL-fähige Enumeration in NHibernate zuordnen?

System.Data.SqlClient.SqlException: Conversion failed when converting the 
nvarchar value 'VGS' to data type tinyint. 

Die Eigenschaft als

definiert ist
public virtual CostContributor? ReplacementContributor { get; private set; } 

und die Abbildung ist

Map(x => x.ReplacementContributor).CustomTypeIs(typeof(CostContributor?)); 

Ich habe versucht, jeden Kombination von CustomTypeIs und CustomSqlTypeIs, einschließlich der Substitution von int? oder Byte? für CostContributor ?, aber nichts hat funktioniert. Es funktioniert gut, wenn ich es zu einem nicht nullbaren Typ mache.

Ist es möglich, ein NULL-fähiges Enum in NHibernate zu mappen? Oder ist das ein Fehler oder eine nicht unterstützte Funktion in NHibernate?

Wenn ich diese Arbeit nicht machen kann, werde ich einen Undefinierten Wert zu meiner enum als Workaround hinzufügen.

Antwort

2

Dies war ein bug and it's been fixed.

+0

Der hier angegebene Link ist tot, aber die Frage wurde unter http://stackoverflow.com/questions/13881971/fluent-nhibernate-mapping-nullable-enum beantwortet – bunggo

0

nicht sicher, wie es richtig zu machen, aber hier ist eine andere Abhilfe:

eine Klasse hinzufügen genannt CostContributorEntity. Die Klasse hat nur die Eigenschaft: ID des Typs CostContributor. Sie müssen keine echte Tabelle erstellen, wenn Sie dies nicht möchten.

Ändern Sie in den verbrauchenden Klassen ErsetzungContributor vom Typ CostContributorEntity, und ordnen Sie es als Referenzen (x => x.ReplacementContributor);

Verwenden Sie session.Load (CostContributor.Blahblah1), um eine Instanz von CostContributorEntity zu erstellen, die Sie ReplacementContributor zuweisen können.

Verwandte Themen