C# nhibernate 多层架构

Posted

技术标签:

【中文标题】C# nhibernate 多层架构【英文标题】:C# nhibernate mulitier architecture 【发布时间】:2012-03-09 10:59:00 【问题描述】:

我需要一些建议:我想在表示层和业务逻辑层中解耦 nHibernate 依赖关系,以便只有数据访问逻辑层引用 nHibernate DLL。

我只看到使用 SessionHelper/SessionManager 对象的解决方案,并且所有解决方案都是在顶层使用的。我相信必须存在更好的解决方案。

我应该遵循什么设计模式? 我可以在存储库模式中封装会话(管理器、助手等)并轻松更改 ORM 而无需在业务逻辑层强制更改吗?

代码示例将不胜感激。提前致谢。

【问题讨论】:

"轻松更改 ORM?"您只能在您可能想要使用的所有 ORMS 之间使用最小公分母。你会遇到性能问题,因为你不能使用很多特性来增强它,并且你会有泄漏的抽象。 这个问题出现了很多,一般的答案是:不要这样做。在极少数情况下,能够换出 ORM 是值得进行重大权衡的。如果不完全消除它,就很难“隐藏” ORM。 嗨@MichaelMaddox:理论上我不想切换ORM,因为客户不支付那种投资。我的目标是能够实现基类/泛型类(适用于我的所有项目),并允许我隐藏我不想被看到的内容(即对 ORM 的依赖项)。我想封装nhibernate session、EF objectcontext等,你会如何实现这样一个类? 【参考方案1】:

Here is a nice presentation about nHibernate Worst Practices

你问的是第一个最坏的做法,所以一定要检查一下

You should check out the presenters nice blog which reviews these types of "architectures"

“我应该遵循什么设计模式” 请务必始终使用常识设计模式和 YAGNI :)

【讨论】:

以上是关于C# nhibernate 多层架构的主要内容,如果未能解决你的问题,请参考以下文章

5000 万条记录中的内存不足 c# nhibernate

来自表 Y 的关联引用了一个未映射的类:Y - C# NHibernate

NHibernate .SelectList() 与 C# 中的 List<string>

Nhibernate官方体系结构图部分中文翻译

如何在运行时从 nhibernate 映射文件生成实体类

Nhibernate学习教程-- 第一个NHibernate程序