使用一个使用本土实体框架的应用程序作为引用的DLL(无源代码),我必须使用其方法访问SQL数据,如:
var allMyClasses = EF.ReadTable<MyClass>("select a, b, c from myTable")
此调用返回IList<MyClass>
。每当MyClass
有一个字符串成员(可以从预定义列表中获取值)时,我很想将其重构为enum
,如下所示:
enum Things{ Something, Anotherthing }
class MyClass{
public int a {get; set;}
public Things b {get; set;}
public void set_b(string value)
{
if(Enum.TryParse(value, out Things th))
{
b = th;
}
else throw new ArgumentException("Unsupported thing: {}", th);
}
public string c {get; set;}
}
我的假设是,只要有b
的重载setter使用了string
参数,从DB检索到的字符串到enum Things
的转换应该是自动的。相反,我不断收到运行时异常:
System.ArgumentException:&#39;类型&#39; System.String&#39;的对象不可能是 转换为&#39; Things&#39;。&#39;
这是本土EF的一个缺点,它不知道如何将string
分配给enum
。有没有办法在我的代码中解决这个问题而不需要写几行代码?