当我定义NHibernate实体/映射以使用Guid作为标识列时,我收到一个异常。 Guid列生成为varchar(40),但内容似乎是二进制。
有解决方案吗?现在我只是使用普通的ol'int,但对未来的项目知道会很高兴! :)
答案 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。