流畅的 NHibernate 获取视图,无需唯一标识符

2024-02-19

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

构造函数注释:

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

public class PersonMapping : ClassMap<Person>
{
    public PersonMapping()
    {
        Table("person");
        ReadOnly();

        Id();
        Map(f => f.Name, "name");
    }
}

NHibernate 需要一个 ID。该方法文档说它创建了一个 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);
    [...]
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

流畅的 NHibernate 获取视图,无需唯一标识符 的相关文章

随机推荐