Dapper官方庫 在guid和string互轉的問題


之前在和老何談論他的開源項目Util中使用MySql的過程中發現了官方dapper在轉換guid到string時候的一個錯誤

Error parsing column 0 (ID=6c2adb93-d81a-4fda-8e25-c6e90d4ebaaa - Object)

 

在官方github提了issue但一直沒有給到更新和回復,其實解決方案也是非常簡單的,利用dapper的TypeHandler處理下轉換的過程即可

public class StringGuidHandler:SqlMapper.TypeHandler<string>
{
public override void SetValue(IDbDataParameter parameter, string value)
{
parameter.Value = value;
}

public override string Parse(object value)
{
return value.ToString();
}
} 

  

之后全局加入即可(此處為了方便以console為例)

using Dapper;
using System;
using System.Data.SqlClient;

namespace GuidDemo
{
class Program
{
static void Main(string[] args)
{
try
{
SqlMapper.AddTypeHandler(typeof(string), new StringGuidHandler());
string sqlString = "server=192.168.1.3;uid=sa;pwd=demo$;database=demo;";
using (SqlConnection conn = new SqlConnection(sqlString))
{
conn.Open();//打開連接

string strSql = @"SELECT * from Test_002 WHERE Name='sa'";


Test_002 count = conn.QueryFirst<Test_002>(strSql);


var testObject=new Test_002(){ID =Guid.NewGuid().ToString(),Name = "b"};
conn.Execute($"insert into Test_002 (Id,Name) values ({testObject.ID},{testObject.Name})");

}
}
catch(Exception e)
{

}
}
}
}

using System.Data;
using Dapper;

namespace GuidDemo
{
public class StringGuidHandler:SqlMapper.TypeHandler<string>
{
public override void SetValue(IDbDataParameter parameter, string value)
{
parameter.Value = value;
}

public override string Parse(object value)
{
return value.ToString();
}
}
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM