将没有 Id 的数据库视图映射到 NHibernate 中的 class 模型

Mapping db view without Id to class model in NHibernate

在我的应用程序中,我使用 NHibernate ORM 和 Automapper 将实体映射到 class 模型。作为: fluent-nhibernate/wiki/Auto-mapping

对于表它的工作。

问题是当尝试映射没有 Id 字段的数据库视图时,例如:

public class VTest
{

    [NotNull]
    public virtual AAATab AAA { get; set; }
    [NotNull]
    public virtual BBBTab BBB { get; set; }

}

我创建复合键:

public void Override(AutoMapping<VTest> mapping)
    {
        mapping.IgnoreProperty(x => x.Id);
        mapping.CompositeId()
                .KeyProperty(x => x.AAA.Id)
               .KeyProperty(x => x.BBB.Id);
    }

但它不起作用。获取错误,因为在数据库查询中有 select id :

[GenericADOException: could not execute query [ SELECT this_.Id as Id7_0_, this_.AAAId as AAAId7_0_, this_.BBBId as BBB_7_0_ FROM [VTest] this_ ]

这种情况下可以使用自动映射器吗?

我找到了解决办法。在 compositeKey 中必须在数据库视图中使用物理存在 属性,所以我创建了新属性:

public virtual int AAAId {get;set;}
public virtual int BBBId {get;set;}

然后我创建:

    mapping.IgnoreProperty(x => x.Id);
    mapping.CompositeId()
           .KeyProperty(x => x.AAAId)
           .KeyProperty(x => x.BBBId);

这个视图自动映射或 table 没有 Id 有效。 (要对 dbview 或 table 建模,您需要添加覆盖函数 Equals() 和 GetHashCode() )