fluent nhibernate自动递增非键(Id)属性
是否可以由数据库管理类auto increment的integer属性,但不能作为主键(或NHibernate所指的Id)?我很难找到这样做的例子。任何帮助都将不胜感激。谢谢。两种选择fluent nhibernate自动递增非键(Id)属性,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,是否可以由数据库管理类auto increment的integer属性,但不能作为主键(或NHibernate所指的Id)?我很难找到这样做的例子。任何帮助都将不胜感激。谢谢。两种选择 如果数据库对此负有100%的责任,您只需要告诉NHibernate该属性已生成,而不需要将其包含在任何更新/isnerts中。缺点是NH需要进行额外的选择,以使该值在内存中保持新鲜
- 如果数据库对此负有100%的责任,您只需要告诉NHibernate该属性已生成,而不需要将其包含在任何更新/isnerts中。缺点是NH需要进行额外的选择,以使该值在内存中保持新鲜
- 如果数据库不负责,而您只是希望自动完成此操作,则可以使用拦截器在插入时将值设置为1,并在更新时将其递增1
编辑: 我是个白痴,没注意到你说的是流利的NHibernate
编辑#2: 我想您可能也对使用本专栏作为版本控制感兴趣
< version name="Foo" generated="always" />
这对我很有用:
public class Potato
{
public virtual Guid Id { get; protected set; }
public virtual int LegacyId { get; protected set; }
}
public class PotatoMap : ClassMap<Potato>
{
public PotatoMap()
{
Id(x => x.Id).GeneratedBy.GuidComb();
Map(x => x.LegacyId).CustomSqlType("INT IDENTITY(1,1)").Not.Nullable().ReadOnly().Generated.Insert();
}
}
另一方面,ReadOnly和Generated.Insert()将告诉NHibernate该值仅在Insert时由数据库自动生成,因此它必须在每次插入时查询数据库中的值
请注意,我只使用Sql Server测试了这一点。自定义类型可能会更改,或者在其他数据库中不可用。别担心,它几乎相同。Map(x=>x.Foo).ReadOnly().SetAttribute(“生成的”,“始终”);SetAttribute将替换为Generated.Always,当我们达到1.0时。我下载了最新的FNH,有点被.Update()不带参数弄糊涂了。我不确定在映射中会出现什么结果。不过ReadOnly()还是有道理的。
create table [Potato] (
Id UNIQUEIDENTIFIER not null,
LegacyId INT IDENTITY(1,1) not null,
primary key (Id)
)