Nhibernate 流畅的纤维酸多态性。如何检查类的类型
我有一个具有内容(一对一)关系的图标Nhibernate 流畅的纤维酸多态性。如何检查类的类型,nhibernate,fluent-nhibernate,fluent-nhibernate-mapping,Nhibernate,Fluent Nhibernate,Fluent Nhibernate Mapping,我有一个具有内容(一对一)关系的图标 public class Icon { public virtual Content Content {get; set;} } 默认情况下,它是延迟加载的,这正是我想要的。 然而,在代码中的某个点上,我需要检查什么类型的内容,内容是多态的,比如 if(icon.Content is TextContent) { ... } 图标是另一个关联的一部分,由NHibernate自动获取,我不手动获取 在这种情况下,检查实际类型的推荐方法是什么 我可以
public class Icon
{
public virtual Content Content {get; set;}
}
默认情况下,它是延迟加载的,这正是我想要的。
然而,在代码中的某个点上,我需要检查什么类型的内容,内容是多态的,比如
if(icon.Content is TextContent)
{
...
}
图标是另一个关联的一部分,由NHibernate自动获取,我不手动获取
在这种情况下,检查实际类型的推荐方法是什么
我可以有一个特定的属性,如ContentType,它将是一个枚举,以便识别实际的内容类型,但我想知道是否有其他方法。如果要进行此类检查,必须从属性中删除代理。 有几种方法可以做到这一点:
session.PersistenceContext.Unproxy(icon.Content);
public virtual U As<U>() where U : YourType {
return this as U;
}
public virtual U As(),其中U:YourType{
将此作为U返回;
}
Self
属性:
public virtual void Self
{
get { return this; }
}
第五种方法是在映射中使用'lazy=“no proxy”“。谢谢你的建议,但同时我发现了一个有趣的解决方案,我认为更好 使用访问者模式,我可以定义IconContent访问者并将要执行的操作传递给它。 例如,假设有一个TextContent和一个ImageContent,它将是这样的:
IconContentVisitor.Func(()=> { Console.WriteLine("this is TextContent"; }, ()=> { Console.WriteLine("this is ImageContent"));
这个想法来自这里: