如果开始一个新项目,你会为你的 ORM NHibernate 或 LINQ 使用什么以及为什么。各有什么优缺点。
编辑:LINQ to SQL 不仅仅是 LINQ(感谢@Jon Limjap)
如果开始一个新项目,你会为你的 ORM NHibernate 或 LINQ 使用什么以及为什么。各有什么优缺点。
编辑:LINQ to SQL 不仅仅是 LINQ(感谢@Jon Limjap)
我问过自己一个非常相似的问题,除了我考虑的不是 NHibernate,而是我认为非常好的 WilsonORM。
在我看来,有许多重要的区别。
林克:
休眠:
这真的取决于。如果您开发一个 Rich (Windows) 桌面应用程序,您需要在其中构造对象、使用它们并最终保留它们的更改,那么我会推荐像 NHibernate 这样的 ORM 框架。
如果您开发的 Web 应用程序通常只查询数据,并且只是偶尔将一些数据写回数据库,那么我会推荐像 Linq 这样好的查询语言。
所以一如既往,这取决于。:-)
错误... NHibernate 有 LINQ。
也许您的意思是使用哪个:
我更喜欢NHibernate。
LINQ to SQL 相当轻量级,但它与您的数据结构的耦合更紧密一些,而 NHibernate 在可以映射到表结构的对象定义类型方面非常灵活。
当然,这并不是说 LINQ to SQL 没有用处:这个网站使用它。我相信在数据库模式不是那么庞大的小型应用程序中启动和运行非常有用。
从 NHibernate 开始是一个坏主意。它只有通过巧妙的设置才能显示出良好的性能。尝试将 EFv4 用于大型项目,将 L2S(可能是第 3 部分产品)用于中小型项目。这些产品比 NHibernate 更方便灵活,让您快速上手。
不是完整的清单
LinqToSQL Pro:
缺点:
NHibernate Pro:
缺点:
在 2 个 ORM 之间
如果出现以下情况,我会选择 LinqToSql:
如果出现以下情况,我会选择 Nhibernate:
注意:这是我个人的看法。我主要处理(疯狂的)遗留数据库和复杂的 ETL 作业,其中对象模型对 SQL 有很大帮助。
我不使用(甚至不知道)NHibernate,我只想作证:我使用 LINQ to SQL 大约 2 年以来使用 MySQL 和 PostgreSQL 数据库(在 Windows 上使用DbLinq ,在 Linux 和 Mac OS X 上使用 Mono)。
因此 LINQ to SQL 不仅限于 Microsoft 产品。
我可以确认 LINQ to SQL 非常适合中小型项目,或者您可以完全控制数据库结构的大型项目。正如评论所表明的那样,LINQ to SQL 有一些限制,当数据库表和实体类之间没有直接映射时,使其成为不合适的工具。
注意:LINQ to SQL 不支持多对多关系(但这可以通过几行代码轻松实现)。
The main drawback of NHibernate is the inability to make use of method calls. They cannot be translated to SQL. To circumvent that, you have to recreate expression trees which is difficult to do.