我有一个包含枚举类型字段的类。
enum myEnum { foo, bar }
class myClass {
...
public myClass(myEnum myField)
{
this.myField =myField;
}
public myEnum myField {get;set;}
}
枚举值作为varchars(即'foo',bar')存储在数据库中,而不是整数。
我想用dapper给dapperQuery()来填充我的对象,但无法让它工作,Dapper一直在抱怨它没有为myClass找到合适的构造函数
我已经读过这个问题 ,似乎暗示我想要实现的目标应该是可能的,但我只是看不出(我正在使用Dapper 1.38)
我已经尝试添加一个TypeHandler
的myEnum
,但它并没有帮助。
当我看到引擎盖下它似乎是短小精悍的搜索TypeHandler
的MyClass的(在SqlMapper.GetDeserializer()
并没有发现任何(因为我的TypeHandler
为myEnum定义,并进入呼叫SqlMapper.FindConstructor
Findconstructor似乎并不关心typeHandlers,它只是查找完全匹配,检查myEnum或它的底层类型是否与string类型相同,确定它不是,返回null,并且调用者抛出...
编辑:如果您删除显式构造函数,上面的代码。
似乎工作正常。以下测试为绿色:
public enum MyTestEnum
{
Foo,
Bar
}
public class MyTestClass
{
public MyTestEnum MyTestEnum { get; set; }
}
public class DapperTests
{
[Test]
public void EnumMappingTest()
{
DbConnection conn = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"]);
var result = conn.Query<MyTestClass>("select MyTestEnum = 'Foo'").First();
Assert.That(result.MyTestEnum, Is.EqualTo(MyTestEnum.Foo));
}
}