相关疑难解决方法(0)

可以使用Dapper默认使用AnsiStrings吗?

我正在使用Dapper对数据库,其中字符串主要存储在VarChar列中.默认情况下,Dapper NVarChar在生成查询时使用参数,而我可以将我使用的每个字符串参数包装起来DbString,默认情况下使用AnsiStrings非常好并且DbString用于NVarChar案例.

我试图从改变所述小巧玲珑源的类型映射DbType.StringDbType.AnsiString然而,似乎导致IL生成的误差的参数代表(引发InvalidProgramException).

有更简单的方法吗?

更新

只是改变typeMap是不够的我也需要改变一些if (dbType == DbType.String)检查.现在它有效!

c# dapper

12
推荐指数
1
解决办法
4993
查看次数

更改 .net DateTime 的 Dapper 映射以使用 DbType DateTime2 并再次将其恢复

类似于问题如何让 Dapper 将 .net DateTime 映射到 DateTime2;但我希望事后能够将其重新设置回来。

该问题当前接受的答案涉及更改 Dapper 源文件;但我正在使用 NuGet 包,所以这对我不起作用。正如对已接受答案的第一条评论所指出的,这是不可逆的 - “如果有些是 DateTime 而另一些是 DateTime2 怎么办?” - 这就是我的场景:不同的查询需要不同的映射(每个查询只需要其中之一)。

我正在使用同一问题的得票较高的答案。然而,这种做法似乎也是不可逆转的。似乎第一个查询完成时设置的任何值都会保留,并且此后不可更改。

以下代码是 MCVE。如果运行它,您会看到类型始终显示为“datetime”,并且值的精度永远不会超过毫秒(正如您对日期时间的期望);尽管尝试改变映射。然后,您必须注释掉对“PerformDapperQuery()”的第一次调用,然后再次运行它:您现在将看到该类型始终返回为“datetime2”,并且这些值在秒的小数部分上具有完整的 7 位精度(正如您对 datetime2 的期望)。

public static void Main()
{
    // I know this is marked as obsolete, and I am open to suggestions for alternatives.
    // see https://github.com/StackExchange/Dapper/issues/798
#pragma warning disable 618
    var oldValue = SqlMapper.LookupDbType(typeof(DateTime), null, false, out var handler);
#pragma warning restore 618

    PerformDapperQuery();
    SqlMapper.AddTypeMap(typeof(DateTime), …
Run Code Online (Sandbox Code Playgroud)

c# sql-server datetime datetime2 dapper

5
推荐指数
1
解决办法
2435
查看次数

标签 统计

c# ×2

dapper ×2

datetime ×1

datetime2 ×1

sql-server ×1