C# 试图处理由于继承而导致的nHibernate代理类
我有一个每个层次结构的表设置(下面是我的域对象)。问题是,在处理任何返回的nhibernate对象时,它们都是基类型的代理 我发现了这个(以及其他一些),但这个也提供了链接,以避免丢失延迟加载 问题 然而,在尝试将泛型方法放置在返回类型参数类型的基类上的文章建议之后,我得到了一个新的错误 错误:“不能对ContainsGenericParameters为true的类型或方法执行后期绑定操作。” 注意:我知道我可以在映射中关闭延迟加载,但正如前面提到的,我试图利用不丢失延迟加载的优势 nHibernate版本:3.3.1.4000 fluent nhibernate版本:1.3.0.733C# 试图处理由于继承而导致的nHibernate代理类,c#,nhibernate,fluent-nhibernate,C#,Nhibernate,Fluent Nhibernate,我有一个每个层次结构的表设置(下面是我的域对象)。问题是,在处理任何返回的nhibernate对象时,它们都是基类型的代理 我发现了这个(以及其他一些),但这个也提供了链接,以避免丢失延迟加载 问题 然而,在尝试将泛型方法放置在返回类型参数类型的基类上的文章建议之后,我得到了一个新的错误 错误:“不能对ContainsGenericParameters为true的类型或方法执行后期绑定操作。” 注意:我知道我可以在映射中关闭延迟加载,但正如前面提到的,我试图利用不丢失延迟加载的优势 nHiber
public class ItemBase : IItemBase
{
public virtual int Id { get; set; }
public virtual int Version { get; set; }
public virtual string Name { get; set; }
public virtual string Description { get; set; }
public virtual T As<T>() where T : ItemBase
{
return this as T;
}
//removed for brevity
}
public class Item : ItemBase
{
public virtual Store Store { get; set; }
}
public class VendorItem : ItemBase
{
public virtual Vendor Vendor { get; set; }
}
这仅在同一会话中有效。然而,在一个案例中,我们试图在原始会话之外访问,我得到了一个错误:对象是未初始化的代理您是否尝试过使用以下方法
NHibernateUtil.Initialize(myobject)
什么是.NET版本?我记得.NET3.5中带有泛型参数的类的动态代理存在一些问题。
顺便说一句,当关联的会话不再存在时,访问代理的unloaded属性将出现异常情况,因此即使您解决了第一个问题,Unproxy()的第二个问题仍然存在。使用访问者模式实际需要的答案。NHibernate的返回类型是基类的代理,因此任何试图转换为所需类型的尝试都是不可能的。Visitor模式允许您通过多态性识别对象的类型。您可以发布生成的代码来解决此问题吗?
NHibernateUtil.Initialize(myobject)