gpt4 book ai didi

c# - 我如何在 nhibernate 中急切地加载子集合

转载 作者:太空宇宙 更新时间:2023-11-03 10:44:37 26 4
gpt4 key购买 nike

对于这样一个菜鸟问题深表歉意。

我有两个实体:Parent 和 Child,建模如下:

public class Parent()
{
public virtual int ID{ get; protected set; },
public virtual IList<child> Children {get;set;}
}

public class Child()
{
public virtual int ID{ get; protected set; },
public virtual Parent Parent {get;set;}
}

使用这些映射:

public class ParentMap : ClassMap<Parent>
{
public ParentMap()
{
Id(x => x.Id).GeneratedBy.Identity();
HasMany(x=>x.Children)
.Cascade
.AllDeleteOrphan()
.Inverse();
}
}

public class ChildMap : ClassMap<Child>
{
public ChildMap()
{
Id(x => x.Id).GeneratedBy.Identity();
References(x=>x.Parent)
.Cascade
.SaveUpdate();
}
}

我保留了延迟加载,因为 parent 可以有很多 child ,我不想总是加载 child 。

我试过以下方法:

var query1 = Session.QueryOver<Parent>()
.Where(x => x.Id == parent.Id)
.Fetch(t=>t.Children).Eager().List<Parent>();

var query2 = Session.CreateCriteria<Parent>("d")
.Add(Restrictions.Eq("Id", parent.Id))
.SetFetchMode("d.Children", FetchMode.Eager)
.List<Parent>();

var query3 = Session.CreateCriteria(typeof (Parent))
.Add(Restrictions.Eq("Id", parent.Id))
.SetFetchMode("Children", FetchMode.Eager)
.List<Parent>();

当然,我已经简化了这些对象,但我也在他们自己的控制台应用程序中尝试了这些,只是为了测试。问题是:在这些查询中,我实际上没有得到 child 。

查看 SQL Profiler,我看不到任何由 nhibernate 生成的连接。我知道我可以走另一条路,从 child 那里得到 parent ,但我不想那样做。

我想我在理解 Nhibernate 时遗漏了一些基本的东西。

感谢您的帮助

最佳答案

解决了这个问题,实际上应该在第一个代码示例中包含更多细节。

在同一 session 中保存父对象(使用级联)后,我试图检索父对象的子对象。

关闭 session 并尝试上述任何一个查询都会返回 child (ren)。

关于c# - 我如何在 nhibernate 中急切地加载子集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23940929/

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