我使用NHibernate 4.0.0.4000(与代码映射)和SQL Server 2012NHibernate的读取从SQL Server时间戳列
我不得不进入表内,以(其中包括)含有timestamp
(否则也已知作为rowversion)列。到现在为止,我可以通过在实体/映射中不使用它来简单地忽略该列。
现在我想使用它来查看自上次检查问题表以来哪些行发生了更改。
由于时间戳只能由SQL Server更改,NHibernate生成的任何语句都必须忽略此列。我没有找到解决这个问题的方法。
我的实体:
public class TblAnwendungsbelegposition {
public virtual int ANWBID { get; set; }
// Other properties cut out for readability
public virtual byte[] upsize_ts { get; set; }
}
我的映射:
public class TblAnwendungsbelegpositionMap : ClassMapping<TblAnwendungsbelegposition> {
public TblAnwendungsbelegpositionMap() {
Table("tbl_anwendungsbelegposition");
Schema("dbo");
Lazy(true);
Id(x => x.ANWBID, map => map.Generator(Generators.Identity));
//Other properties cut out for readability
Property(x => x.upsize_ts, map => map.Access(Accessor.ReadOnly));
}
}
结果此版本:
作为e无法更新时间戳列
在期间读取(在自动Session.Flush()
上关闭使用语句环绕数据库连接)的错误消息。
当我删除的映射我没有问题可以读取访问,但是当我插入一个新行到表中,我得到的消息
无法插入显式值时间戳列。对列列表使用INSERT来排除时间戳列,或者将DEFAULT插入到时间戳列中。 PigTool.Entities.TblAnwendungsbelegposition:方法set_upsize_ts应该是'
当我改变到private set;
,我在初始BuildSessionFactory();
以下类型可能不被用作代理获得消息公共/受保护的虚拟'或'受保护的内部虚拟'
当我从实体属性中删除时,我在i nitial BuildSessionFactory();
找不到属性的设置“upsize_ts”类“PigTool.Entities.TblAnwendungsbelegposition”
有没有人有一个想法,我怎么能顺利读取包含这个只读列行,而保留生成新行的能力?我不希望每个相关表都有两个实体/映射,其中一个不包含日常工作的timestamp属性,另一个包含它,但只用于阅读。