不带唯一标识符的Fluent NHibernate获取视图

不带唯一标识符的Fluent NHibernate获取视图,nhibernate,fluent,Nhibernate,Fluent,我试图映射一个没有标识符的视图,但nhibernate仍然生成一个id列为的sql(给我一个sql错误,因为id列在数据库中不存在)。也许我误解了Id()构造函数 建造商意见: 创建一个在域对象中没有相应属性的Id, 或数据库中的列。这主要用于只读访问 和/或视图。默认为带有“增量”生成器的整数标识 公共类PersonMapping:ClassMap { 公众人物地图 { 表(“人”); 只读(); Id(); 地图(f=>f.名称,“名称”); } } NHibernate需要一个ID。方法文

我试图映射一个没有标识符的视图,但nhibernate仍然生成一个id列为的sql(给我一个sql错误,因为id列在数据库中不存在)。也许我误解了Id()构造函数

建造商意见:

创建一个在域对象中没有相应属性的Id, 或数据库中的列。这主要用于只读访问 和/或视图。默认为带有“增量”生成器的整数标识

公共类PersonMapping:ClassMap
{
公众人物地图
{
表(“人”);
只读();
Id();
地图(f=>f.名称,“名称”);
}
}

NHibernate需要一个ID。方法文档说它创建的ID在域对象中没有相应的属性,但是数据库仍然有一个ID

如果表中没有要标记为标识符的字段(必须是唯一的..),则可以尝试标识一些可以组合为复合id的列

例如,给出一个简单的链接表,它将一些int链接到另一个int,如

A | B
-----
1 | 2
1 | 3
2 | 2
只要所有A/B组合都是唯一的,就可以使用复合ID

public PersonMapping()
{
    [...]
     CompositeId()
         .KeyProperty(x => x.A)
         .KeyProperty(x => x.B);
    [...]
}

您可以将记录检索为值对象(非托管实体),而不是实体

sess.CreateSQLQuery("SELECT NAME, BIRTHDATE FROM CATS")
    .SetResultTransformer(Transformers.AliasToBean(typeof(CatDTO)))
14.1.5.返回非管理实体

可以对本机sql查询应用
IResultTransformer
。允许它返回非托管实体

sess.CreateSQLQuery("SELECT NAME, BIRTHDATE FROM CATS")
    .SetResultTransformer(Transformers.AliasToBean(typeof(CatDTO)))
此查询指定:

  • SQL查询字符串
  • 结果转换器

上述查询将返回一个已实例化的
CatDTO
列表,并将
NAME
BIRTHNAME
的值注入其相应的属性或字段中。”

是否有绝对忽略db字段的方法。像这样的Id(Guid.NewGuid)或smth?