在NHibernate中将没有Id的db视图映射到类模型

本文关键字:视图 db 映射 模型 Id NHibernate | 更新日期: 2023-09-27 18:09:39

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

问题是当一个尝试映射数据库视图没有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);
    }

,但它不工作。get错误,因为在db查询中有select id:

[GenericADOException: could not execute query [SELECT this_.]Id作为Id7_0_ this_。AAAId是AAAId7_0_,这_。BBBId作为BBB_7_0_ FROM [VTest] this_]

在这种情况下可以使用自动减速器吗?

在NHibernate中将没有Id的db视图映射到类模型

我找到解决方案。在复合键必须使用物理存在属性在数据库视图,所以我创建新的属性:

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

And i create:

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

对于没有Id的视图或表的自动映射可以工作。(要对dbview或表建模,需要添加覆盖函数Equals()和GetHashCode())