NHibernate 或 LINQ to SQL [关闭]
-
09-06-2019 - |
题
如果开始一个新项目,您会为 ORM NHibernate 或 LINQ 使用什么以及为什么。各自的优点和缺点是什么。
编辑:LINQ to SQL 不仅仅是 LINQ(感谢@Jon Limjap)
解决方案
我问过自己一个非常相似的问题,只不过我考虑的是 WilsonORM,而不是 NHibernate,我认为它非常好。
在我看来,存在许多重要的差异。
链接:
- 不是一个完整的 ORM 工具(您可以使用一些额外的库,例如最新的实体框架 - 我个人认为与其他 ORM 框架相比,MS 的这项最新技术的架构已有大约 10 年的历史)
- 主要是查询支持智能感知的“语言”(编译器将检查查询的语法)
- 主要与 Microsoft SQL Server 一起使用
- 是闭源的
休眠状态:
- 是ORM工具
- 没有智能感知的查询语言非常有限
- 几乎可以与您拥有数据库提供商的任何 DBMS 一起使用
- 是开源的
这确实取决于。如果您开发一个 Rich (Windows) 桌面应用程序,需要在其中构造对象、使用它们并最终保留它们的更改,那么我会推荐像 NHibernate 这样的 ORM 框架。
如果您开发的 Web 应用程序通常只是查询数据并且只是偶尔将一些数据写回数据库,那么我会推荐像 Linq 这样的优秀查询语言。
一如既往,这取决于情况。:-)
其他提示
呃……有 NHibernate 的 LINQ.
也许您的意思是使用哪个:
- LINQ 到 SQL
- NHibernate
我更喜欢 NHibernate。
LINQ to SQL 相当轻量,但它与数据结构的耦合更加紧密,这与 NHibernate 不同,NHibernate 在可映射到表结构的对象定义类型方面非常灵活。
当然,这并不是说 LINQ to SQL 没有用处:这个网站就使用它。我相信在数据库模式不那么庞大的小型应用程序中启动和运行非常有用。
从 NHibernate 开始并不是一个好主意。只有通过巧妙的设置才能显示出良好的性能。尝试对大型项目使用 EFv4,对中小型项目使用 L2S(可能是第 3 部分产品)。这些产品比 NHibernate 更方便、更灵活,可以让您快速上手。
不是完整列表
linqtosql pro:
- 更好的工具支持
- 好的 linq 提供商
- 当 db-schema == 类时很容易开始 -
缺点:
- 不灵活(即数据库模式!=类)
- 仅支持 MS SQL Server
- 没有级联(保存、更新...不级联到引用的对象)
Nhibernate Pro:
- 很多 RDBMS 支持 ootb
- 功能丰富
- 对于几乎所有极端情况都非常灵活
- 开源
缺点:
- 开始并不容易
- 不是来自微软
- 工具有很多,但你必须寻找
2 个 ORM 之间
如果满足以下条件,我会选择 LinqToSql:
- 数据库模式 == 类
- 只使用 MS SQL Server
- 商店只允许 MS 产品
如果满足以下条件,我会选择 Nhibernate:
- 更丰富的对象模型
- 遗留数据库模式
- MS SQL Server 以外的数据库或支持多个
- 性能至关重要(我认为 NH 比 LinqToSql 有更多优化性能的功能)
笔记:这是我个人的看法。我主要处理(疯狂的)遗留数据库和复杂的 ETL 作业,其中对象模型比 SQL 有很大帮助。
我不使用(甚至不知道)NHibernate,我只是想给出我的见证:我使用 LINQ to SQL 大约 2 年了,使用 MySQL 和 PostgreSQL 数据库(使用 数据库连接器 在 Windows 上,使用 单核细胞增多症 在 Linux 和 Mac OS X 上)。
因此 LINQ to SQL 并不局限于 Microsoft 产品。
我可以确认 LINQ to SQL 非常适合中小型项目,或者您对数据库结构有绝对控制权的大型项目。正如评论所表明的那样,LINQ to SQL 有一些限制,当数据库表和实体类之间没有直接映射时,这使其成为不合适的工具。
笔记 :LINQ to SQL 不支持多对多关系(但这可以通过几行代码轻松实现)。
NHibernate 的主要缺点是无法利用 方法调用. 。它们无法转换为 SQL。为了避免这种情况,您必须重新创建表达式树,这是很难做到的。