c# - OfType<> 与 NHibernate Proxy 类不能很好地配合

标签 c# nhibernate fluent-nhibernate

我有类似于以下内容的类(class):

public abstract class Base { }
public class Concrete : Base { }
public class Cement : Base { }

以及以下代码

var bases = someEntity.Bases; // returns two Concrete and once Cement

// bases now contains:
// - ProxyBase : Base
// - Concrete : Base
// - Cement : Base

var concretes = bases.OfType<Concrete>(); 

// concretes only contains one Concrete (i.e. the ProxyBase is ignored)

如何使用 NHibernate 知识获得两个 Concrete 的预期结果而不污染我的类?

如果可能的话,我也不想强制映射不使用延迟加载。

最佳答案

这绝对是动态代理的一个痛点。您可以向基类添加 Self 属性,以便获得对未代理对象的引用:

public virtual Base Self
{
    get { return this; }
}

然后你可以通过检查类型来获取某种类型的具体类:

var concretes = bases.Where(b => b.Self is Concrete);

您还可以创建一个扩展方法,以便 OfType 按预期运行:

public static IEnumerable<T> OfType<T>(this IEnumerable<Base> bases) where T : Base
{
    return Enumerable.OfType<T>(bases.Select(b => b.Self));
}

关于c# - OfType<> 与 NHibernate Proxy 类不能很好地配合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23018444/

相关文章:

c# - 旋转 Y 改变 X 值

c# - hibernate查询使用nolock时出现识别错误

.net - 带有 nhibernate 的 mysql 连接太多

c# - 根据其他按钮可见性的按钮位置

c# - 在 ASP.NET 中动态生成 HTML

wpf - 在 MVVM WPF 中使用工作单元设计模式/NHibernate session

c# - 流畅的 NHibernate 多实体关系映射

c# - NHibernate 无法删除子实体

c# - MVC中如何让访问者等待一个方法完成?

.net - 复杂查询的ORM(尤其是NHibernate)性能