我从EF切换到Nhibernate。 Nhibernate看起来有点强大,我已经可以说它比微软给我们的英国媒体报道要快得多。不是一个“仇恨”,但在我看来EF很糟糕。我被允许发表意见,直到政府剥夺了我们的意见。
我正在使用Fluent Nhibernate进行配置和映射,一切都很好我可以获取数据并获取数据。现在是有趣的部分。第一:会话管理;在通过关于这个主题的Interwebs上的文章进行筛选后,我现在更加困惑。我已经看到了错误的方式,以及一些人会说的正确方法。我有设置和Http模块用于绑定和解除绑定等...然后看着我的w3p在蚂蚁中变得臃肿。毋庸置疑,我废弃了Http模块并使用了Castle Windsor Per网络请求解决方案:
container.Register(
Component.For<ISessionFactory>().LifestyleSingleton().UsingFactoryMethod(
m => NhibernateSessionFactoryHelper.BuildSessionFactory()));
container.Register(
Component.For<ISession>().LifestylePerWebRequest().UsingFactoryMethod(
k => container.Resolve<ISessionFactory>().OpenSession()));
// UPDATE: If this is not per webrequest ISession will close on second attempt
container.Register(Component.For<ITransactionManager>().ImplementedBy<TransactionManager>().LifestylePerWebRequest());
味道好,少吃!!因此,我对使用Windsor的每个Web请求感到满意,但我现在正在寻找处理事务和关联事务类型的方法。看看Nhibernate如何喜欢交易中的一切。
此外,我暂时修改了我的Repository实现,因为它似乎真的抽象出了Nhibernate所能提供的一半很酷的东西?我还读了一篇关于http://ayende.com/blog/的文章。这个家伙讨厌存储库模式,似乎很详细地解释了原因;这有点道理。他并没有真正提供替换存储库模式的具体解决方案。
什么取代了通用存储库?人们如何处理MVC3应用程序中的交易? ActionFilters可能吗? [交易]关于ActionMethod ??
感谢您阅读我的咆哮,我很想看看2012年人们如何处理这个问题。请注意,请不要发布任何链接到UOW或Sharp Arch。我看到了很多,而且很懒。