NHibernate:使用'Inverse'和内连接连接映射

时间:2012-09-17 19:00:53

标签: nhibernate join nhibernate-mapping inner-join

我必须使用返回的参数函数fp_Transaction_ACL(userId)连接表TransactionDeclaration(Id,...)(TransactionDeclarationId,AccessRightId)。连接必须是内连接。

我使用Fluent NHibernate完成了以下映射:

    public TransactionDeclarationMap()
    {
        this.Id(transactionDeclaration => transactionDeclaration.Id);                   
        this.Join(
            "fp_TransactionDeclaration_ACL(:AclFilter.userId)",
            join =>
            {
                join.KeyColumn("TransactionDeclarationId");
                join.Map(transactionDeclaration => transactionDeclaration.AccessRight, "AccessRightType").CustomType
                    <AccessRight>().Generated.Always().ReadOnly();
                join.Inverse();
                join.Fetch.Join();
            });
     }

由于不能插入或更新该函数,我已添加'join.Inverse()',如下所述:

Nhibernate/hibernate Avoid Insert in joined table or view

但是当我添加这个反转时,连接变成了一个左外连接,这对我的用例来说是不合适的。我需要一个内部联接来过滤函数未返回的表'TransactionDeclaration'的记录。

如何获得内部联接?或者是否有“反向”的替代方法以避免插入函数?

1 个答案:

答案 0 :(得分:0)

我不知道如何在Fluent中执行此操作,但您必须在某处指定您所加入的键不可为空。

这样的事情,也许是:

public TransactionDeclarationMap()
{
    this.Id(transactionDeclaration => transactionDeclaration.Id);                   
    this.Join(
        "fp_TransactionDeclaration_ACL(:AclFilter.userId)",
        join =>
        {
            join.KeyColumn("TransactionDeclarationId");
            join.Map(transactionDeclaration => transactionDeclaration.AccessRight, "AccessRightType").CustomType
                <AccessRight>().Generated.Always().ReadOnly();
            join.Inverse();
            join.SetAttribute ("optional", false);
            join.Fetch.Join();
        });
 }

click了解更多信息。