使用Dapper-dot-net,如何将SQL uniqueidentifier列映射到.Net类型?

时间:2013-12-19 15:42:15

标签: .net tsql dapper

我有一个使用SQL“uniqueidentifier”类型的现有数据库,它看起来与.Net GUID不同的GUID格式。

问题:使用Dapper,如何将SQL uniqueidentifier列映射到.Net?

问题: 使用Dapper-dot-net,当我使用.Net GUID类型映射列时,它会编译并运行,但所有.ToString()输出都显示相同的错误GUID。 (这与我在SSMS中看到的不一致)

当我尝试使用字符串类型映射列时,出现编译错误。

想法?这可能吗?

2 个答案:

答案 0 :(得分:10)

我还发现我可以将它转换为T-SQL中的varchar,但我想在.NET中使用实际的GUID类型。

使用Dapper 1.38(也使用SQL Server作为底层RDBMS),如果我将POCO属性设为Nullable<Guid>,我就可以顺利完成映射。 SqlGuid或字符串不起作用。

public class MapMe
{
    public Guid? GuidByDapper { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        using (var connection = Utility.GetConnection())
        {
            var mapped = connection.Query<MapMe>("SELECT NEWID() AS GuidByDapper").Single();
            Console.WriteLine("Guid: {0}", mapped.GuidByDapper);
        }
    }
}

作为控制台应用,它会吐出以下内容:

Guid: 85d17a50-4122-44ee-a118-2a6da2a45461

答案 1 :(得分:8)

啊哈!您似乎必须将SQL uniqueidentifier转换为T-SQL中的字符串,然后映射到.Net中的字符串类型。

string sql = @"SELECT TOP 100
               CONVERT(varchar(36), MyIdColumn) AS IdColumnString
               FROM MyTable";

conn.Query<string>(sql).ToList();

我认为需要特别注意在更新时从.Net字符串转换回T-SQL uniqueidentifier,但我还没有测试过这个问题。