2009-08-18 63 views
4

我有一个视图,它展示了4个表格的层次以显示为报告。在视图中它包含每个表的主键(Guid)以及一些显示数据。nhibernate,Mysql和Guids的问题

问题是,guid被作为varbinary(16)而不是二进制(16)返回,因此nhibernate会引发错误。这对我来说似乎是一样的,但也许我错过了一些东西。

Guid应该包含32个带4个破折号的数字(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)。

我已经尝试添加尊重二进制标志= true;到配置字符串,似乎所有这些都会影响常规类是否工作。

这一个让我难住。作为最后手段,我即将把主键还原为整数。

回答

1

这是在MySQL .NET连接器检查错误的详细信息 这个bug报告http://bugs.mysql.com/bug.php?id=52747

UPDATE: 版本之后6.1.1每当你使用你应该加上“旧的GUID = true”将连接字符串BINARY(16)作为您的存储类型。否则,你应该使用CHAR(36)

+0

Jalchr - 它是否解决了?似乎没有解决办法。除非我错过了什么。 – 2010-06-26 04:43:44

3

解决方案:创建一个自定义的方言

public class MySQL5GuidFixDialect 
    : MySQL5Dialect 
{ 

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

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