关于c#:NHibernate,Castle和Linq之间的区别-他们的目标是谁?

关于c#:NHibernate,Castle和Linq之间的区别-他们的目标是谁?

Differences between NHibernate, Castle, Linq - Who are they aimed at?

此答案表明,Linq与NHibernate,Castle等针对的开发人员群体略有不同。

对于C#来说还很陌生,请不要忘记围绕它的所有数据库内容:

  • 除了NHibernate,Castle和Linq之外,还有其他主要的SQL包装器(缺少更好的术语)吗?
  • 它们之间有什么区别?
  • 他们针对的是哪种开发人员或开发?

-亚当


当您说城堡时,我假设您指的是城堡活动记录?

区别在于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


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


NHibernate和Linq To Sql是对象/关系映射器,旨在减轻对象和RDBMS之间的阻抗不匹配。如果您想实现可测试的,持久性的无知应用程序,则可以使用NHibernate。我总是会推荐NHibernate而不是Linq To Sql。两种工具都旨在消除处理数据访问的问题。您真的需要编写几次数据访问代码?

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


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

另一方面," LINQ to SQL"是您可以比较其他SQL包装器的内容。


推荐阅读