如何在NHibernate中为主键列生成Sequential guid。我知道怎么做自动增量的东西。但我不知道如何为主键创建顺序Guid。
在数据库中,Id列的数据类型为uniqueidentifier
。我查看了官方文档和其他一些网络搜索结果。但我无法找到任何解决方案。这就是我现在所拥有的:
public UserMap()
{
Table("Users");
Id(x => x.Id);
Property(x => x.Username, x => x.NotNullable(true));
Property(x => x.Email, x => x.NotNullable(true));
Property(x => x.PasswordHash, x =>
{
x.NotNullable(true);
x.Column("password_hash");
});
}
答案 0 :(得分:2)
我是这样做的:
在我的业务实体类
中public abstract class EntityBase : IEntity
{
public virtual Guid Id { get; protected set; }
...
}
流畅的映射:
Id(x => x.Id).GeneratedBy.GuidComb();
阅读关于Guid.comb的this
答案 1 :(得分:1)
查看Adam Bar的文档
让我引用:
最常见的主键映射可通过Id方法获得。
Id(x => x.Id, m => { m.Column("id"); m.Generator(Generators.Native, g => g.Params(new { // generator-specific options })); m.Length(10); m.Type(new Int32Type()); m.Access(Accessor.Field); });
缺少一些功能 - 例如未保存的值(将添加 在NHibernate 3.3)或DDL列选项中。
可能最重要的选项是Generator。它指明了方式 NHibernate(或数据库)生成唯一值。有8个 通过静态生成器可用的预定义类型的生成器 类:
public static class Generators { ... // Guid public static IGeneratorDef Guid { get; } // sequential Guid public static IGeneratorDef GuidComb { get; }
因此,基于此,我们可以调整映射:
public UserMap()
{
Table("Users");
Id(x => x.Id, m =>
{
m.Generator(Generators.GuidComb);
}
...