首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NHibernate:使用'Inverse‘和inner连接映射

NHibernate:使用'Inverse‘和inner连接映射
EN

Stack Overflow用户
提问于 2012-09-18 03:00:53
回答 1查看 786关注 0票数 0

我必须加入一个表TransactionDeclaration(Id,...)参数函数fp_Transaction_ACL(userId)返回(TransactionDeclarationId,AccessRightId)。联接必须是内联接。

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

代码语言:javascript
复制
    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‘的记录,而不是函数返回的记录。

怎样才能获得一个内部连接?或者有没有一种替代‘逆向’的方法来避免在函数中插入?

EN

回答 1

Stack Overflow用户

发布于 2012-09-18 03:04:26

我不知道如何在Fluent中做到这一点,但你必须在某个地方指定你要加入的键是不可空的。

可能是这样的:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12465536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档