首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在guid.comb db中使用MySql策略

问如何在guid.comb db中使用MySql策略
EN

Stack Overflow用户
提问于 2010-01-03 17:12:17
回答 3查看 2.6K关注 0票数 1

是否可以使用guid.comb策略使用Nhibernate生成Mysql的身份?

当我用它作为

代码语言:javascript
复制
   mapping.Id(x => x.Id)
        .Column("row_guid")
        .CustomType(typeof(string))
        .GeneratedBy.GuidComb()
        .Length(36);

我的结果是

-> System.InvalidOperationException :标识类型必须是Guid

有没有办法克服MySql场景中的这个障碍?

编辑:

我在guid和int之间没有选择。这是MSSql遗留数据库的一个端口。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-01-04 07:36:08

这是常见的问题,特别是在将MSSql应用程序移植到MySql时。

正如David所说,实现一个简单的CustomIdGenerator,它是GuidCombGenerator上的一个包装器,它将Guid作为字符串提供给您。

代码语言:javascript
复制
using NHibernate.Engine;
using NHibernate.Id;

namespace NHibernateMaps
{
  public class GuidStringGenerator : IIdentifierGenerator
  {
    public object Generate(ISessionImplementor session, object obj)
    {
      return new GuidCombGenerator().Generate(session, obj).ToString();
    }

  }
}

在映射中,将其指定为

代码语言:javascript
复制
 mapping.Id(x => x.Id)
    .Column("row_id")
    .CustomType(typeof(string))
    .GeneratedBy.Custom(typeof(GuidStringGenerator))
    .Length(36);
票数 4
EN

Stack Overflow用户

发布于 2010-01-03 17:30:37

我不相信在主键中使用不受支持的数据类型是明智的,但是如果您确实需要这样做,那么您可以尝试编写一个NHibernate用户类型,它将其属性公开为Guid,但以字符串形式保存到数据库中。本例中的问题似乎是属性本身被定义为System.Guid以外的数据类型,这是guid.comb策略所期望的。

我不能保证它仍然不会出错,但如果可能的话,这是你让它工作的唯一方法。如果您是NHibernate用户类型的新手,那么就会有一个抽象基类来处理这里的一些苦差事,还有一个示例实现类。你应该能够效仿这个例子。

票数 2
EN

Stack Overflow用户

发布于 2010-01-03 18:55:23

只可以使用System.Guid作为属性的类型。

O/RM是关于映射的,所以即使您的数据库本机不支持给定类型,您仍然可以在域模型中使用它。为了实现BINARY(16)兼容性,您的列的底层类型应该是MySQL。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1995579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档