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

l3d*_*3dx 5 mysql nhibernate guid

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

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

Ahm*_*ruz 7

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

由于nhibernate中的当前MySQL方言未更新以反映此更改(实际上 已准备好问题 ),因此在nhibernate生成模式后,您需要手动将这些字段转换为BINARY(16).


小智 5

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

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