【问题标题】:How can I map BINARY(16) to GUID with Dapper?如何使用 Dapper 将 BINARY(16) 映射到 GUID?
【发布时间】:2018-11-05 02:24:16
【问题描述】:

我将数据作为BINARY(16) 存储在数据库中,我想使用dapper 选择数据并将其映射到Guid 的模型属性。这样做的好方法是什么?

小巧玲珑 1.50.4

【问题讨论】:

标签: mysql mariadb dapper guid


【解决方案1】:

如果您在我们数据库中的所有 guid 都存储为 BINARY(16),我将继续创建自定义类型处理程序以自动将二进制格式转换为 GUID。比如:

class BinaryGuid {
  public Guid Guid;
  public BinaryGuid(byte[] binaryGuid) {
    <your-code-here>  
  } 
}

public class BinaryGuidHandler: SqlMapper.TypeHandler<BinaryGuid>
{
    public override Roles Parse(object value)
    {
        <your-code-here>
    }

    public override void SetValue(IDbDataParameter parameter, BinaryGuid value)
    {
        <your-code-here>
    }
}

然后你注册它以供 Dapper 使用

SqlMapper.AddTypeHandler(new BinaryGuidHandler());

你应该很高兴:

var r = conn.Query<BinaryGuid>("SELECT MyBinaryGuid FROM MyTable")

我在这里写了一篇关于如何在 Dapper 中管理自定义类型的文章(和示例):

https://medium.com/dapper-net/custom-type-handling-4b447b97c620

【讨论】:

  • 这可能是最好的方法,但很高兴看到 Guid 可以以多种不同格式存储(通常是数据库指定的格式)的警告,但由于 mariadb 没有在这里指定一个,由用户决定使用哪一个。如果不小心,这可能会导致潜在的数据损坏
猜你喜欢
  • 2011-08-19
  • 2019-09-18
  • 2012-08-18
  • 2018-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多