0

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

我使用 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 避免在连接表或视图中插入

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

如何获得内部联接?或者有没有替代“逆”以避免插入函数?

4

1 回答 1

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();
        });
 }

点击了解更多信息。

于 2012-09-17T19:04:26.303 回答