在NHibernate中使用Guid作为Id列会在使用MySQL时导致格式异常

时间:2009-06-23 20:10:19

标签: mysql nhibernate guid

当我定义NHibernate实体/映射以使用Guid作为标识列时,我收到一个异常。 Guid列生成为varchar(40),但内容似乎是二进制。

有解决方案吗?现在我只是使用普通的ol'int,但对未来的项目知道会很高兴! :)

2 个答案:

答案 0 :(得分:7)

MySql Connector文档指出,从.NET连接器的5.2版开始,它们将GUID视为 BINARY(16)而不是 VARCHAR(40)

  

由于nhibernate中的当前MySQL方言未更新以反映此更改(实际上an issue已准备好)   你需要手动转换这些   在nhibernate之后到BINARY(16)的字段   生成架构。

答案 1 :(得分:5)

对此的另一个更新是最新的连接器使用Char(36)

此选项在Connector / NET 6.1.1中引入。 GUID类型的后端表示已从BINARY(16)更改为CHAR(36)。这样做是为了允许开发人员使用服务器函数UUID()来填充GUID表--UUID()生成一个36个字符的字符串。旧应用程序的开发人员可以将“Old Guids = true”添加到连接字符串,以便使用数据类型为BINARY(16)的GUID。