NHibernate、Castle、Linq 之间的区别——它们针对谁?

Posted

技术标签:

【中文标题】NHibernate、Castle、Linq 之间的区别——它们针对谁?【英文标题】:Differences between NHibernate, Castle, Linq - Who are they aimed at? 【发布时间】:2010-09-10 02:30:31 【问题描述】:

This answer says Linq 针对的开发人员群体与 NHibernate、Castle 等略有不同。

对于 C# 来说还是个新手,别管它周围的所有数据库内容:

是否还有其他主要的 SQL 包装器(由于缺少更好的术语)比 NHibernate、Castle、Linq ? 它们之间有什么区别? 他们针对什么样的开发者或开发者?

-亚当

【问题讨论】:

【参考方案1】:

当您说 Castle 时,我假设您是指 Castle Active Record?

不同之处在于 NHibernate 是一个 OR/M,面向希望专注于域而不是数据库的开发人员。使用 linq to sql,您的数据库是预先存在的,并且您的关系和一些编程将由您的数据库的定义方式驱动。

现在在 NHibernate 和 Castle ActiveRecord 之间——它们的相似之处在于您从域中驱动应用程序设计,但是使用 NHibernate 您提供映射 xml 文件(或使用流利的 NHibernate 映射类),而在 Active Record 中您正在使用约定优于配置(使用属性来定义任何不适合自然的列和设置)。 Castle Active 记录仍在后台使用 NHibernate。

一个 OR/M 不一定是“一条真正的路”。这取决于您的环境、您开发的应用程序和您的团队。

您可能还想查看SubSonic。它非常适合主动记录,但不适用于您希望主要关注您的域的项目。根据项目的不同,我通常使用 NHibernate(带有 Castle Active Record)或 Subsonic

【讨论】:

【参考方案2】:

LINQ 只是一组新的 C# 功能:扩展方法、lambda 表达式、对象初始化器、匿名类型等。

另一方面,“LINQ to SQL”是您可以比较其他 SQL 包装器的东西。

【讨论】:

【参考方案3】:

实际上,我们同时使用 Linq 和 NHibernate(与 Fluent 一起使用)。如果你对学习曲线有一点耐心,那么你很快就会坠入爱河。

【讨论】:

【参考方案4】:

NHibernate 和 Linq To Sql 是对象/关系映射器,旨在轻松处理对象和 RDBMS 之间发现的阻抗不匹配问题。如果您想实现一个可测试的、持久的、无知的应用程序,NHibernate 是您的最佳选择。我总是推荐 NHibernate 而不是 Linq To Sql。这两种工具都旨在消除对数据访问的处理。你真的需要写多少次数据访问代码?

Castle 是一个应用程序框架和控制反转容器,不提供数据访问。它提供了使用 NHibernate 的工具,从而减少了摩擦,它还提供了使用 NHibernate 的 Actuve Record 模式的实现。

【讨论】:

以上是关于NHibernate、Castle、Linq 之间的区别——它们针对谁?的主要内容,如果未能解决你的问题,请参考以下文章

Castle ActiveRecord / NHibernate - 密码加密或散列

Castle ActiveRecord + NHibernate 中的交易傻瓜

在共享主机上使用 Castle Windsor 和 NHibernate 设施

NHibernate ISession 与 Castle Windsor IoC 的循环依赖

Castle Windsor、Fluent Nhibernate 和 Automapping Isession 关闭问题

使用 Castle ActiveRecord,当两个类名称相同但名称空间不同时,我会收到 NHibernate DuplicateMappingException