她是我的情况,其中枚举值存储在数据库字符串。虽然检索我得到一个异常,试图将字符串转换为enum使用基类为EnumStringType的mytype。处理异常时进行枚举值不匹配字符串值
这里是我得到的错误:
NHibernate.HibernateException : Can't Parse Enum4 as MyEnum
例如:从数据库里的值是:“Enum4”
有效枚举值中为每个MyEnum的代码是:
Enum1 Enum2 Enum3
不知怎的,Enum4在代码容纳之前在Db中引入他改变了。 (我知道疯狂的事情发生)
例外的情况是正常的,因为我的枚举没有这个值来自数据库。但我不希望用户得到异常。相反,默认为第一个值。 (我同意这在某些情况下是不行的,但是它可以防止在我的情况下更严重的异常)
如果我没错,GetInstance是将字符串转换为枚举的方法。是否有某种TryGetXXXX来解决这个问题或者如何解决这个问题?
谢谢你的时间!
这里是枚举代码我摆弄来解决这个问题:
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))
{
}
}
这是它。我只需要改变像Enum.TryParse((字符串)代码,真,出instanceValue); – isakavis
你知道你也可以只更新根据表并只设置了所有“Enum4”值“Enum1”。 –
我需要这个代码为Enum4做将会是有效的。这只是导致此问题的过渡时间。覆盖可以在基类中完成吗? – isakavis