例如,我有一组域类。这些类实现了一个通用接口。界面是公共的,但类本身是内部的。可以使用提供的公共工厂创建这些类的实例。此外,每个类实例都使用每层一个表的技术进行持久化。
如何使用Fluent NHibernate?任何帮助将不胜感激。
谢谢, 布雷克
答案 0 :(得分:2)
这是比FNH更具体的NHibernate,但就我所见,你有两个选择。
实施IInterceptor.Instantiate(string entityName, EntityMode entityMode, object id)
- 您还必须将所述拦截器与您开始的任何NHibernate会话相关联。
根据http://fabiomaulo.blogspot.com/2008/11/entities-behavior-injection.html,子类ReflectionOptimizer' and implement the
CreateInstance()`方法(对于要为其构建工厂的每种类型,需要一个)。有些配置和布线我还不完全理解,我怀疑这基本上是方法#1的过度杀伤版本。
如果你想为你的域类注入持久字段和属性,我不确定是否有办法做到这一点,因为这是一个非常重要的事情要概括。
答案 1 :(得分:1)
您还可以利用NHibernate 2.0+中的事件系统。 Load
事件允许您为NHibernate创建对象。您所要做的就是创建ILoadEventListener
的实现,将其添加到ISessionFactory
或ISession
的事件侦听器,并获利!
using NHibernate.Event.Default
public class MyCreatorListener : DefaultLoadEventListener
{
// this is the single method defined by the LoadEventListener interface
public override void OnLoad(LoadEvent theEvent, LoadType loadType)
{
if(null == theEvent.InstanceToLoad) // Not null if user supplied object
{
theEvent.InstanceToLoad = MyFactory.Create(loadType); // Or whatever.
}
}
}