gpt4 book ai didi

nhibernate - 与组件一起使用时,Linq to nHibernate Fetch 给出错误 "A fetch request must be a simple member access expression"

转载 作者:行者123 更新时间:2023-12-03 11:13:22 25 4
gpt4 key购买 nike

我有两个类:

public class Reference
{
public virtual string Id { get; set; }
// ...
public virtual Stamp Stamp { get; set; }
}

public class Stamp
{
public DateTime? Created { get; set; }
public User CreatedBy { get; set; }
public DateTime? LastUpdated { get; set; }
public User LastUpdatedBy { get; set; }
}

Reference.Stamp 使用以下流畅的 nhibernate 映射映射为一个组件(以便“Stamp”字段出现在 Reference 表中):

public class ReferenceMap : ClassMap<Reference>
{
public ReferenceMap()
{
Id(e => e.Id);
// ...
Component(e => e.Stamp);
}
}

public class StampMap : ComponentMap<Stamp>
{
public StampMap()
{
Map(e => e.Created);
References(e => e.CreatedBy);
Map(e => e.LastUpdated);
References(e => e.LastUpdatedBy);
}
}

我想对“CreatedBy”和“LastUpdatedBy”字段进行急切获取,以避免在列出我的“引用”项目时出现 N+1。

我试过这个:

Reference[] references = session
.Query<Reference>()
.Fetch(r => r.Stamp.CreatedBy)
.Fetch(r => r.Stamp.LastUpdatedBy)
.ToArray();

导致此错误的原因:

System.ArgumentException:获取请求必须是 o => o.Related 类型的简单成员访问表达式; “r.Stamp.CreatedBy”太复杂了。

关于如何让我的抓取工作有什么想法吗?

最佳答案

我认为这是 LINQ 提供程序的限制。

您可以:

  • 使用Fetch(有更好的替代方法来解决 N+1 问题;我更喜欢批处理)
  • 直接映射这些属性,无需 Component
  • 使用 HQL 而不是 LINQ

不过,我相信您的构造应该得到支持。您可以在 https://nhibernate.jira.com 打开一个问题

关于nhibernate - 与组件一起使用时,Linq to nHibernate Fetch 给出错误 "A fetch request must be a simple member access expression",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12504639/

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