我有类似于以下内容的类(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/