C# Fluent NHibernate-如果实体的某个依赖项不存在,则不返回该实体

C# Fluent NHibernate-如果实体的某个依赖项不存在,则不返回该实体,c#,events,nhibernate,fluent-nhibernate,C#,Events,Nhibernate,Fluent Nhibernate,假设我有表“单元格”、表“分区”以及它们之间的连接表。 此外,我无法映射表“Cells”,因为我必须映射“CellsView”(它可以显示依赖于当前用户权限的单元格) 接下来。。可能存在这样一种情况,分区分配给一个单元格,但当前用户如果想列出分区,就看不到该单元格。 在检索分区列表时,我们的用户得到一个异常,该异常表示预期ID为“1”的单元格不存在。(ID正确且单元格存在,但我们的视图不允许显示该单元格) 如何防止分区列表引发异常(已启用延迟加载)**以及显示将引发该异常的分区** 我已经尝试在

假设我有表“单元格”、表“分区”以及它们之间的连接表。 此外,我无法映射表“Cells”,因为我必须映射“CellsView”(它可以显示依赖于当前用户权限的单元格)

接下来。。可能存在这样一种情况,分区分配给一个单元格,但当前用户如果想列出分区,就看不到该单元格。 在检索分区列表时,我们的用户得到一个异常,该异常表示预期ID为“1”的单元格不存在。(ID正确且单元格存在,但我们的视图不允许显示该单元格)

如何防止分区列表引发异常(已启用延迟加载)**以及显示将引发该异常的分区**

我已经尝试在OnPreLoad事件和OnPostLoad事件中为当前实体设置空值 如果我的单元格实体无法解析但无法工作。所有分割实体都会返回,fluent在读取它们时会尝试解析单元格并引发异常


CellsView连接在应用程序内部的许多地方都使用,所以像这种带有PostLoad事件的通用解决方案非常适合全局处理

我没有使用Fluent,但如果它重复使用,您应该能够在集合上定义并应用过滤器。这应该允许你处理你的案件

过滤器允许对实体集合的元素定义一些参数化限制。您可以在会话打开后参数化和激活过滤器,您应该知道谁是您的用户

实际上,过滤器可以在映射之外定义,所以即使Fluent不处理它们,您也应该能够使用它们

示例来自:

这将被转换为SQL,并且应该在没有异常的情况下执行,并且会过滤掉不可访问的分区

顺便说一句,如果要获得
部门
列表所做的只是显式地查询它们,那么过滤器可能不是您的答案。(不是通过将它们作为集合引用的一些过度实体获取它们。)在这种情况下,只需在查询中直接使用上述条件即可


为了只处理异常,还可以使用关系的
notfound=“ignore | exception”
选项修改映射。但我不确定它是否适合惰性加载,我从未尝试过。(我不知道fluent是否提供此选项。)

过滤器的想法似乎不错,但我不想过滤到特定的值(例如black cat),但如果子实体甚至存在(cat的类型为“male”),我想检查此类型是否正确加载,或者如果类型将引发错误,则不返回整个cat。(我想使用IsInitialized)。你认为有可能吗?我补充了更多细节。
ICollection<Cat> blackKittens = session.CreateFilter(
    pk.Kittens, "where this.Color = ?", Color.Black, NHibernateUtil.Enum(typeof(Color))
).List<Cat>();
"where this.Cell.SomeNonNullableProperty is not null"