我的情况是枚举值作为字符串存储在Db中。检索时,我遇到异常,尝试使用基类为EnumStringType的mytype将字符串转换为枚举。
这是我得到的错误:
NHibernate.HibernateException : Can't Parse Enum4 as MyEnum
Run Code Online (Sandbox Code Playgroud)
例如:来自数据库的值是:“ Enum4”
根据MyEnum的代码,有效的枚举值为:
Enum1 Enum2 Enum3
在代码适应更改之前,以某种方式将Enum4引入到Db中。(我知道发生了疯狂的事情)
异常是正常的,因为我的Enum没有来自数据库的该值。但是我不希望用户得到例外。而是默认为第一个值。(我同意这在某些情况下不行,但是可以防止在我的情况下更为严重的异常)
如果我是对的,则GetInstance是执行从字符串到枚举的转换的方法。是否有某种TryGetXXXX可以解决此问题或如何解决?
谢谢你的时间!
这是我正在解决的Enum代码:
public class EnumMappingBase : EnumStringType
{
public EnumMappingBase(Type type)
:base(type)
{
}
public override object GetInstance(object code)
{
return base.GetInstance(code); // Here is where I get the exception.
// I am thinking this is where capturing the exception and defaulting must happen.
// I wish I had a TryGetInstance() here or may be it is there and I am not aware.
}
public override object GetValue(object code)
{
return base.GetValue(code);
}
}
public enum MyEnum
{
Enum1,
Enum2,
Enum3
}
public class MyEnumType : EnumMappingBase
{
public MyEnumType()
: base(typeof(MyEnum))
{
}
}
Run Code Online (Sandbox Code Playgroud)
尝试重写 MyEnumType 中的 GetInstance(),如下所示:
public class MyEnumType : EnumMappingBase
{
public MyEnumType()
: base(typeof(MyEnum))
{}
public override object GetInstance(object code)
{
// Set the desired default value
MyEnum instanceValue = MyEnum.Enum1;
Enum.TryParse(code, true, out instanceValue);
return instanceValue;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1156 次 |
| 最近记录: |