nhibernate,Mysql和Guids的问题

时间:2009-08-18 16:28:38

标签: mysql nhibernate views connection-string

我有一个视图,可以将4个表的层次变平,以显示为报告。在视图中,它包含每个表的主键(Guid)以及一些显示数据。

问题是guids以varbinary(16)而不是binary(16)的形式返回,因此nhibernate会抛出错误。这对我来说似乎是一样的,但也许我错过了一些东西。

  

Guid应包含32位数字,包含4个破折号(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)。

我尝试添加Respect Binary Flags = true;对于配置字符串,所有似乎都会影响常规类是否有效。

这个让我很难过。我将把主键恢复为Integers作为最后的手段。

2 个答案:

答案 0 :(得分:3)

解决方案:创建自定义方言

public class MySQL5GuidFixDialect
    : MySQL5Dialect
{

    public MySQL5GuidFixDialect()
    {
        RegisterColumnType(DbType.Guid, "CHAR(36)");
    }
}

不要忘记在NHibernate配置中配置它。我更喜欢CHAR over VARCHAR,因为它使用(或应该使用)静态alloc而不是动态的固定长度字段

答案 1 :(得分:1)

这是Mysql .net连接器中的一个错误,请查看此错误报告以获取更多详细信息 http://bugs.mysql.com/bug.php?id=52747

更新: 在版本6.1.1之后,只要使用BINARY(16)作为存储类型,就应该在连接字符串中添加“old guids = true”。否则你应该使用CHAR(36)