微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – Dapper micro ORM,数据库不可知和MySql Guid类型

我正在试验一个宠物项目Dapper.我使用SQLite运行所有测试和MySql进行“生产”.但是我不确定如何最好地使用Dapper来处理数据库不可知的情况.

我遇到的特殊问题是MySql不支持主键的Guid类型,因此我使用varchar(40)作为类型(SQLite支持唯一标识符,这是一个guid).所以如果我有一个通用的存储库,问题就出现了,我在尝试从MySql数据库中选择时会遇到麻烦.因为Id属性的类型是Guid,Dapper将抛出“Error parsing column 10”,因为varchar类型与guid类型不匹配.

如果我将Id属性从guid更改为int,那么GetById中的原始sql会更加棘手,我不知道如何编写.它将类似于:1.启动事务,2.插入,3.选择最后插入的id并返回它.所以如果数据库类型是mysql,我会使用last_insert_id,或者如果它是sqlite,那么使用last_insert_rowid?因为原始sql语法在数据库与数据库之间会有很大差异……

public IEnumerable<T> GetById(Guid id) //convention: Id is always of type Guid.
{
  return UnitOfWork.DbConnection.Query<T>(
      string.Format(
        "select * from {0} where Id = @Id", typeof (T).Name), new {Id = id});
}

其他示例是限制返回的行数(特别是对于分页)等等.那我怎么用dapper编写数据库无关的原始sql查询?也许在我的情况下Dapper不合适?也许我应该在这里使用相同的旧NHibernate.有什么建议?我做错了吗?谢谢!

解决方法:

尝试使用CHAR(36)作为MySQL中主键的数据类型,这通过MySQl连接器转换为Guid – 我使用的是MySQL连接器版本6.3.4.也适用于Dapper.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐