0
我有一個數據庫可以被多個系統訪問。我們用Fluent Nhibernate和Automapping讀取表格。驗證或覆蓋FluentNhibernate數據庫到枚舉映射
其中一列是表示枚舉的字符串。在大多數安裝中,這很好,但是現在又有另一個系統會持續一個無效值。我怎樣才能捕獲這些無效值並轉換或忽略它們?
例子:
Database Table:
ID MyEnum
0 "One"
1 "Two"
2 "Invalid"
MyEnum
{
One,
Two
}
我已經使用
IAutoMappingOverride
與我的模型
,反正是有一個函數傳遞給映射器做驗證/轉換(比如我想任何未知轉化爲MyEnum.One
)? 還是有更簡單的方法,我失蹤了?
在那裏我得到了使用和添加
mapping.Map(x => x.Type).CustomType(typeof(SafeEnumType<EventType>));
到here
class SafeEnumType<T> : ImmutableUserType where T : struct
{
public override object NullSafeGet(IDataReader rs, string[] names, object owner)
{
T value;
if (Enum.TryParse((string)rs[names[0]], out value))
return value;
else
return default(T);
}
public override void NullSafeSet(IDbCommand cmd, object value, int index)
{
NHibernateUtil.String.NullSafeSet(cmd, value.ToString(), index);
}
public override Type ReturnedType
{
get { return typeof(T); }
}
public override SqlType[] SqlTypes
{
get { return new[] { SqlTypeFactory.GetString(100) }; }
}
}
的@Firo's answer組合和答案here和我AutomapOverride.Override()
FN
好吧,這不是很整齊我的目的,雖然。是否有一種更簡單的方法來攔截數據庫以便爲特定屬性提供對象步驟? –
這是最簡單的方法。 IUserType的確切問題是什麼? – Firo
特別想處理一個特定的枚舉,如果你編輯你的答案我會接受它,thx。 –