gpt4 book ai didi

c# - NHibernate 加载具有部分子集合的实体

转载 作者:太空宇宙 更新时间:2023-11-03 16:19:54 24 4
gpt4 key购买 nike

有没有办法加载一个 NHibernate 实体,在子集合上有一个子句?我有一个场景,我在“操作”中记录更改,即一个操作可以包含对多个实体的更改。当我想加载特定实体的日志时,我会加载所有操作以及对该实体所做的任何更改。加载这些操作会导致加载所有更改 - 我只想加载相关更改。

类:

public class Operation{
public virtual DateTime TimeStamp { get; set; }
public virtual IList<Change> Changes { get; private set; }
}

public class Change{
public virtual string ChangeText { get; set; }
public virtual int EntityId { get; set; }
}

获取给定实体的操作

 Session.QueryOver<Operation>().Where(o => o.Changes.Any(c => c.EntityId == entityId));

最佳答案

我。如 Oskar Berggren 的回答所述:https://stackoverflow.com/a/13864061/1679310你可以应用过滤器 18.1. NHibernate filters

总结:

调整你的映射

<set ...>
<filter name="myFilter" condition=":myFilterParam = MY_FILTERED_COLUMN"/>
</set>

然后这样调用:

ISession session = ...;
session.EnableFilter("myFilter").SetParameter("myFilterParam", "some-value");
IList results = Session.QueryOver<Operation>()
.Where(...
.List();

二。其他选项是在查询 Operation 时过滤 Changes:16.4. Associations

IQueryOver<Operation,Change> query =
session.QueryOver<Operation>()
.JoinQueryOver<Change>(o => o.Changes) // added explicit <Change>
.Where(c => c.EntityId == entityId);

关于c# - NHibernate 加载具有部分子集合的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14377808/

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