NHibernate:用于别名为ToBeanTransformer的日志记录表的无键实体类-好吗?

NHibernate:用于别名为ToBeanTransformer的日志记录表的无键实体类-好吗?,nhibernate,logging,mapping,entity,primary-key,Nhibernate,Logging,Mapping,Entity,Primary Key,我在数据库中有一个日志记录表,没有任何可用的唯一键,既不是单个键,也不是复合键。它在表中是一个简单的转储,如: CREATE TABLE Logging ( Timestamp DateTime not null, AffectedItemID int not null, KindOfItem int not null, -- enum-like KindOfEvent int not null, -- enum-like UserName nvarcha

我在数据库中有一个日志记录表,没有任何可用的唯一键,既不是单个键,也不是复合键。它在表中是一个简单的转储,如:

CREATE TABLE Logging
(
    Timestamp DateTime not null,
    AffectedItemID int not null,
    KindOfItem int not null, -- enum-like
    KindOfEvent int not null, -- enum-like
    UserName nvarchar(128) null,
    MoreDetails nvarchar(max) null
)
将其映射到NHibernate中的持久类会导致严重的问题,因为需要密钥,但不存在密钥;复合柱(没有更多细节)不是唯一的。我首先尝试使用复合键(除MoreDetails之外的所有列)。查询返回的行将丢失,如果复合键重复,则会出现另一个问题,如果一个或多个键列具有空值(此处仅限用户名)-我在结果列表中多次获得空元素(使用NHibernate条件,with.list())

没有机会添加主键,太多的代码已经在使用表。日志条目中也没有子集合或引用

因此,由于没有直接对象查询(条件、HQL或其他)能够正确地处理此问题,因此我尝试了使用别名和AliasToBeanTransformer的投影。这似乎给出了正确的结果,但我不确定它是否绕过了NHibernate会话标识/密钥检查。我还将会话类型从普通更改为无状态

实体类仍然具有具有非唯一复合键的旧NHibernate映射;我希望在使用AliasToBeanTransformer实现时忽略这一点


有使用这种方法的经验吗?这样可以吗?(并不是说我支持无键表/实体,但有时我必须处理我得到的…

使用查询和
别名BeanTransformer
,就像处理此数据一样。这个类的映射是否存在并不重要,因为如果没有键,映射是不可能的,所以可以丢弃映射

对于此需求,最好的选择可能是
AliasToBeanTransformer