gpt4 book ai didi

.net - 如果定义了显式构造函数,dapper 能否处理在数据库中存储为 varchar 的枚举?

转载 作者:行者123 更新时间:2023-12-01 08:03:16 24 4
gpt4 key购买 nike

我有一个包含枚举类型字段的类。

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 找到合适的构造函数

我读过这个question ,这似乎暗示我想要实现的目标应该是可能的,但我就是看不出如何实现(我使用的是 Dapper 1.38)

我已经尝试为 myEnum 添加一个 TypeHandler,但它没有帮助。

当我仔细观察时,Dapper 似乎在搜索 myClass 的 TypeHandler(在 SqlMapper.GetDeserializer() 中),但没有找到任何内容(因为我的 TypeHandler 为 myEnum 定义,并继续调用 SqlMapper.FindConstructor

Findconstructor 似乎不关心 typeHandlers,它只是寻找一个精确匹配,检查 myEnum 或它的基础类型是否与 string 是同一类型,发现它不是,返回 null,调用者抛出.. .

编辑:如果您删除显式构造函数,以上代码将有效。

最佳答案

好的,我想通了。如果定义了非默认构造函数,dapper 似乎无法处理枚举。

这是因为 dapper 有一个特殊情况来处理无参数构造函数(它们被自动认为是有效的),而显式构造函数是类型检查的并且在我的 varchar - enum 场景中不被接受。

之所以重要,是因为 F# 记录类型,除了默认构造函数之外,它不能有任何构造函数,因此当它们包含枚举成员时,Dapper 无法正确处理它们。

我已经提交了 pull request解决这个问题。

关于.net - 如果定义了显式构造函数,dapper 能否处理在数据库中存储为 varchar 的枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27024806/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com