C# 使用Dapper时,当枚举存储为单个字符时,如何解析它

C# 使用Dapper时,当枚举存储为单个字符时,如何解析它,c#,dapper,C#,Dapper,我有一个枚举定义为- 公共枚举MarkUpCalculationType { 百分率 固定的 } 这些值作为单个值p(百分比)和F(固定值)存储在数据库中。使用与下面类似的存储过程从数据库中提取数据- 选择 M.MarkUpType作为MarkUpCalculationType, -其他选定值 从…起 dbo.M -一些连接 在我的代码的原始版本中,它将接受返回的字符并将属性设置为匹配的枚举值 我现在已经修改了代码以使用Dapper,但它在尝试解析枚举值时给了我一个错误- 分析列15 MarkU

我有一个枚举定义为-

公共枚举MarkUpCalculationType { 百分率 固定的 } 这些值作为单个值p(百分比)和F(固定值)存储在数据库中。使用与下面类似的存储过程从数据库中提取数据-

选择 M.MarkUpType作为MarkUpCalculationType, -其他选定值 从…起 dbo.M -一些连接 在我的代码的原始版本中,它将接受返回的字符并将属性设置为匹配的枚举值

我现在已经修改了代码以使用Dapper,但它在尝试解析枚举值时给了我一个错误-

分析列15 MarkUpCalculationType=p时出错-字符串


我曾经尝试过使用自定义类型处理程序,但从这个角度看,它似乎不会在主Dapper项目中得到修复,坦率地说,我同意Marc Gravell的

,如果您能够稍微更改枚举和存储过程,您可以执行以下操作

更改枚举以向每个枚举添加单字母代码-

公共枚举MarkUpCalculationType { 百分比='P', 固定='F' } 现在,由于枚举不能被类型化为字符,p和F实际上分别由ASCII码80和70表示。你也可以这样写-

公共枚举MarkUpCalculationType { 百分比=80, 固定=70 } 尽管使用实际字符值可以使代码更易于阅读,并且枚举值和数据库值之间的链接更清晰

现在,如果更改存储过程以返回字符的ASCII代码,Dapper应该能够正确解析枚举-

选择 AscimV.MarkUpType作为MarkUpCalculationType, -其他选定值 从…起 dbo.M -一些连接
如果能够稍微更改枚举和存储过程,则可以执行以下操作

更改枚举以向每个枚举添加单字母代码-

公共枚举MarkUpCalculationType { 百分比='P', 固定='F' } 现在,由于枚举不能被类型化为字符,p和F实际上分别由ASCII码80和70表示。你也可以这样写-

公共枚举MarkUpCalculationType { 百分比=80, 固定=70 } 尽管使用实际字符值可以使代码更易于阅读,并且枚举值和数据库值之间的链接更清晰

现在,如果更改存储过程以返回字符的ASCII代码,Dapper应该能够正确解析枚举-

选择 AscimV.MarkUpType作为MarkUpCalculationType, -其他选定值 从…起 dbo.M -一些连接
有趣的想法,一个我从未考虑过的想法。我的第一个想法是使用自定义属性来装饰枚举。类似于[DatabaseValueP]。然后添加一个扩展方法,从enum VariableInterest idea检索该属性值,这是我从未考虑过的。我的第一个想法是使用自定义属性来装饰枚举。类似于[DatabaseValueP]。然后添加一个扩展方法,从枚举变量中检索该属性值