c# - Dapper 可以映射包含破折号的枚举值吗?
问题描述
我正在尝试将包含破折号(“-”)的结果集的值映射到枚举值。
考虑下表:
CREATE TABLE Greeting
(
GreetingId INT PRIMARY KEY,
Text NVARCHAR(64),
LanguageCode NVARCHAR(16)
)
从中选择会产生以下结果集:
SELECT GreetingId, Text, LanguageCode FROM Greeting;
+------------+-------------+--------------+
| GreetingId | Text | LanguageCode |
+------------+-------------+--------------+
| 1 | Hello World | en-US |
+------------+-------------+--------------+
| 2 | Hallo Welt | de-DE |
+------------+-------------+--------------+
此结果集应映射到如下所示的对象结构:
class Greeting
{
public int GreetingId { get; set; }
public string Text { get; set; }
public Language LanguageCode { get; set; }
}
enum Language
{
DeDe,
EnUs
}
查询是这样执行的:
using (var connection = new SqlConnection(CONNECTION_STRING))
{
var result = connection.Query<Greeting>("SELECT GreetingId, Text, LanguageCode FROM Greeting");
}
上面的查询导致System.Data.DataException告诉我Error parsing column 2 (LanguageCode=de-DE - String)。这显然是因为结果集中的“de-DE”无法映射到“Language.DeDe”。
现在我只是想知道在将结果集映射到对象时是否有任何方法可以忽略“-”?已经有一种方法可以使用 . 忽略列名中的“_” Dapper.DefaultTypeMap.MatchNamesWithUnderscores = true;
。当涉及到结果集内容中的破折号时,是否有类似的东西?
解决此问题的明显方法之一是将 SQL 命令重写为:
SELECT
GreetingId,
Text,
REPLACE(LanguageCode, '-', '') AS 'LanguageCode'
FROM
Greeting
...当映射到上面的对象结构时,它就像一个魅力。但是我仍然想知道在映射枚举时是否可以“忽略”破折号?
解决方案
推荐阅读
- xml - 在 XSLT 1.0 中使用 exslt 以下列方式标记 2 个元素的字符串并输出
- cross-browser - MS Edge 错误地呈现页面
- spring-mvc - 如何处理spring boot 2中@Requestbody中的对象抛出的异常
- android - 即使应用程序关闭,如何运行android服务
- gradle - Vaadin 无法加载默认小部件集
- angular - 找不到名称'line' - d3 折线图
- testing - TestCafe 断言失败
- javascript - 如何在 componentDidUpdate() 之后在 render() 中使用最新的 props?
- r - for循环计算R中每一列的回报
- python - 定义类 sql-alchemy:循环分配列类型