我有一个使用SQL“uniqueidentifier”类型的现有数据库,它看起来与.Net GUID不同的GUID格式。
问题:使用Dapper,如何将SQL uniqueidentifier列映射到.Net?
问题: 使用Dapper-dot-net,当我使用.Net GUID类型映射列时,它会编译并运行,但所有.ToString()输出都显示相同的错误GUID。 (这与我在SSMS中看到的不一致)
当我尝试使用字符串类型映射列时,出现编译错误。
想法?这可能吗?
答案 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,但我还没有测试过这个问题。