mybatis.net或nhibernate用于带有SQL后端的新.net Web应用程序

我有一个很大的ORM或非ORM设计困境,非常感谢你的回答和我的问题的理由,因此我试图包含尽可能多的相关背景.

的背景.

我正在设计一个全新的Web应用程序,并选择使用.net(c#)作为服务层和业务对象,MS SQL作为数据库.

我计划构建一个数据驱动的模型,并使域对象和表保持合理的对齐,以避免过多的O / R阻抗不匹配.这样做的原因是我喜欢OO设计(特别是干净,可测试的代码和域逻辑封装),但我真的不喜欢与关系数据库作斗争的想法 – 根据我的经验,没有人在OO vs RDBMS游戏中获胜.

这个新项目的开发人员将具有.net和SQL经验 – 尽管我们中的一些人具有良好的知识水平,但没有实际的DBA数据.

所以现在来决定数据访问/持久化方法.

选择

我缩小了对数据持久性的选择:ORM,数据映射器或手写代码.

> nHibernate

我之前使用过nHibernate,并准备为这个项目提出建议,因为它保存了所有的手动管道,我们确实有一个全新的数据库模式,我们控制,而不是一些传统的野兽.

我很高兴接受nHibernate的动态SQL,我准备放弃对数据库的控制并享受其中的好处:快速开发,1/2级缓存,延迟加载,良好的查询支持等,但有一件事让我很烦恼:

会话管理 – 通过http调用的isession的每个请求的持续会话只会吓到我,并且总是看起来有点容易出错/过时的数据.在asp.net会话中推送一个可能复杂和脏的对象图并稍后尝试重新连接它似乎有风险 – 我记得几年前在重新连接会话时在延迟加载的集合上运行时错误的问题 – 我记得花了几天时间尝试了解ORM正在做什么 – 数据持久性的抽象更像是一种牙齿的抽象!我不明白为什么我必须把它学到如此低的水平才能使用它.

> MyBatis.Net

我对ORM会话管理的担忧以及我试图避免数据库和对象之间存在大量不匹配的事实使我看到像MyBatis.net这样的替代方案(我相信它被myspace使用).

>手卷

在以前的项目中,我手工构建了BL / DAL代码 – 即将属性映射到表字段 – 在对象和存储过程之间编组数据.延迟加载,选择n 1处理,缓存等.

这显然需要花费一些时间和大量无聊的重复代码,但最终会得到一个您熟悉且易于控制的系统:调试更容易.

问题

基于我上面的ramblings,

1)我应该给nHibernate另一个机会并发誓爱它并从里到外学习它
要么

2)我应该学习和使用像MyBatis.net这样的东西并利用我的SQL知识吗?
要么

3)手动创建我的映射代码?

或者是其他东西?

最佳答案 >是的

>也许吧

>不

您对NHibernate的主要关注似乎是每个请求的会话模式,但我认为您对这是什么有误解.每个请求的会话是每个HTTP请求的单个ISession.它与ASP.NET会话状态无关.

点赞