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