gpt4 book ai didi

NHibernate 使用错误的表别名

转载 作者:行者123 更新时间:2023-12-03 17:20:28 25 4
gpt4 key购买 nike

我正在尝试根据外键过滤集合。我有两个映射的类

public class GroupPriceOverrideMap:ClassMap<GroupPriceOverride>
{
public GroupPriceOverrideMap()
{
CompositeId()
.KeyReference(x => x.Service,"ServiceCode")
.KeyReference(x => x.CustomerAssetGroup, "GroupID");

Map(x => x.Price);

Table("accGroupPriceOverride");
}
}

public class CustomerAssetGroupMap:ClassMap<CustomerAssetGroup>
{
public CustomerAssetGroupMap()
{
Id(x => x.GroupID).Unique();

Map(x => x.Description);

References(x => x.Customer).Column("CustomerID");

HasMany<GroupPriceOverride>(x => x.PriceOverrides).KeyColumn("GroupID");

Table("accCustAssetGroup");
}
}

我查询它使用
_session.Linq<GroupPriceOverride>.Where(x => x.CustomerAssetGroup.GroupID == groupID)

然而,这是产生
SELECT this_.ServiceCode as ServiceC1_9_0_, this_.GroupID as GroupID9_0_, this_.Price as Price9_0_ FROM accGroupPriceOverride this_ WHERE customeras1_.GroupID = @p0

where 子句引用了一个不存在的表别名(customeras1)。这可能是与 customerassetgroup 交叉的别名,但没有必要执行该交叉。我确定这只是我映射中的某些内容错误,但我找不到它。我已经尝试了各种列重命名,以防两个表中 GroupID 的存在导致问题,但这并没有解决问题。有任何想法吗?

编辑
我发现如果我查询做
_session.Linq<CustomerAssetGroup>().Where(x => x.GroupID == groupID).FirstOrDefault().PriceOverrides;

然后我得到了正确的结果。我还发现,如果我保存了一个 GroupPriceOverride 然后使用 HQL 查询它,那么它不会被找到,但我仍然可以通过加载父级并查看其覆盖集合来找到该实体。
_session.CreateQuery("FROM GroupPriceOverride i").List().Count;//returns 0
_session.CreateQuery("FROM CustomerAssetGroupi").List().FirstOrDefault().PriceOverrides.Count;//returns 1

最佳答案

看起来像旧 LINQ 提供程序中的错误。你能在这里提交一个错误吗:

https://nhibernate.jira.com/secure/Dashboard.jspa

您可以通过以下方式绕过它:

_session.Linq<GroupPriceOverride>.Where(x => x.CustomerAssetGroup == group)

并让 NHibernate 找出 ID。如果您还没有该组,则可以执行以下操作:
var group = _session.Load<CustomerAssetGroup>(groupID);
_session.Linq<GroupPriceOverride>.Where(x => x.CustomerAssetGroup == group)

ISession.Load(id) 只会生成一个代理,但在您访问属性之前不会实际访问数据库(您不会这样做,因为您只是使用它来指定 ID)。

关于NHibernate 使用错误的表别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4337277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com