我必须使用返回的参数函数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'的记录。
如何获得内部联接?或者是否有“反向”的替代方法以避免插入函数?
答案 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了解更多信息。