Linq to Sql vs Nhibernate vs SubSonic vs 存储过程(帮助)

Posted

技术标签:

【中文标题】Linq to Sql vs Nhibernate vs SubSonic vs 存储过程(帮助)【英文标题】:Linq to Sql vs Nhibernate vs SubSonic vs Stored Procedure (Help) 【发布时间】:2009-07-14 14:55:55 【问题描述】:

我正在为新闻频道开发一个网站。

所以,显然它每天都会收到很多点击,并且每天都会更新很多..

我有 ASP.Net 和 SQL Server 方面的经验..

这些是我正在考虑使用的技术。请帮助我根据负载量选择正确的方法..

技术??

1) ASP.Net 网络表单

2) ASP.Net MVC 1.0

还有数据访问?

1) Linq to SQL(令人印象深刻,但有传言称微软正在放弃它)

2) Linq to Entities(性能问题)

3) 数据读取器/数据集

4) SubSonic(不知道)

5) NHibernate(不知道)

请在发表评论时解释您的观点..

谢谢

奇特雷什

【问题讨论】:

我不介意学习新事物...但我可能只有 3-4 周的时间来提交申请。选择了 ASP.Net MVC.. 但我仍然对数据访问感到困惑.. 任何其他建议请...谢谢 如果你必须在 3 周内交付应用,而你还没有选择数据层,那么你可能已经被淘汰了。 嗯,我同意...实际上没有最后期限...三到四个星期用于选择正确的工具并开始工作..我可能还需要几周才能最终将其引入使用.. 如果有人读到这个......我决定使用 linq to sql......当像 ***.com 这样的网站建立在它之上并且性能非常好......但我只是担心这一点。 .. 微软计划停止未来的支持(谣言).. 使用 linq to sql 会是一个好的决定吗.. ?? 【参考方案1】:

我现在选择的工具是 ASP.Net MVC 1.0 和 NHibernate。

这是我的推理:

ASP.Net MVC

我更喜欢 MVC 而不是 WebForms,原因如下。

ASP.Net MVC 清楚地将我的控制器逻辑与我的视图分开 在 ASP.Net MVC 中,我不必完成 WebForms 中的页面生命周期 我发现在 ASP.Net MVC 中使用良好的 javascript 库(如 jquery)更容易编写 AJAX 应用程序。 ASP.Net MVC 还可以非常轻松地以 JSON 格式返回结果,而无需做太多工作 为 ASP.Net MVC 应用程序编写测试更加直接。作为一名顾问,我必须同时在多个项目之间执行多项任务,并且通过良好的测试可以更轻松地从一个项目转移到下一个项目。

NHibernate

虽然 NHibernate 有一个不错的学习曲线,但它使持久化您的实体变得更加容易。我喜欢 NHibernate,我可以: - 自动延迟加载我的收藏 - 级联从根对象到其子对象的删除和更新 - 一组强大的查询对象,包括 Linq、Criteria API 和 HQL(如果你真的想要,甚至可以直接使用 SQL) - 几个缓存选项

如果你要使用 NHibernate,我肯定会使用 FluentNhibernate。它使映射更容易。

【讨论】:

将 LINQ 与 nHibernate 一起使用使其几乎没有 LINQ to Objects。这意味着如果您不在数据库端进行适当的过滤,它仍然会产生更多的网络流量。 我同意。我也是这么用的。 罗伯特,我同意,如果您对查询做任何复杂的事情,我通常会使用 Criteria API 或 HQL【参考方案2】:

如果我是你,我会使用 LINQ to SQL,而不用担心微软会“放弃”它。首先,微软并没有放弃 LINQ to SQL,他们正在为它创建另一条路径,以允许其他供应商(Oracle、DB2 等)将 LINQ 引入它。我已经阅读了 LINQ 团队主要成员的几篇文章,他们将继续对 LINQ to SQL 进行修改,并且从它到新工具的迁移路径将很容易。其次,LINQ to SQL 非常容易与数据上下文一起使用。如果您了解 SQL,那么学习 LINQ 并不太难。

至于使用哪种技术,1) ASP.Net Webforms 或 2) MVC:我的回答是它们不是相互排斥的。 Web 表单可以构建在 MVC 模型之上,也可以不构建。是否使用 MVC 取决于您。如果您希望您的网站快速而肮脏地完成,我可能会跳过 MVC。如果您希望您的网站在未来易于扩展和/或允许图形设计师在不弄乱代码的情况下对设计进行更改,那么我将实施 MVC。

【讨论】:

【参考方案3】:

WebForms 和 MVC 之间的选择实际上取决于您是否喜欢 Model-View-Controller 方法。就个人而言,我更喜欢 WebForms,但我学习 MVC(在 Rails 中)只是为了拓宽我的经验并获得更好测试的好处。两者都适合您的情况,因为两者都能够扩展到大型系统。

关于数据,我鼓励您在选择任何形式的 Linq 之前仔细考虑。请参阅这些先前的讨论:

Doesn't LinqToSql Miss the Point?

Is LinqToSql Powerful Enough? Aren't fluent interfaces easy to build?

我不推荐 SubSonic,因为文档不存在。你会拉出你的头发试图弄清楚它是如何工作的。这很可悲,因为在很多方面,它都是比 Linq 更好的模型。

最后,我总是选择使用围绕 ADO.NET 的自定义 DAL 包装器。首先,我知道我得到了什么。其次,无论如何,您确实必须了解 SQL,那么为什么要通过尝试学习第二种数据访问语言来让生活变得更加困难呢? Linq 和 SubSonic 的缺点是显而易见的,而优点主要是理论上的(再次,请参阅链接中的讨论以获取更多信息)。

【讨论】:

mark.. 我同意我决定使用 mvc 模型.. 无论如何你知道 ***.com 使用的是什么数据访问技术吗? 所以这不是一个好选择吗???我的意思是……网站的性能如此之快……先生,您怎么说? 我会非常小心地将 SO 的整体性能归因于 Linq,因为影响性能的因素太多了。您可以说的是,像 SO 这样的中型网站使用 Linq 运行得很好;它不会显着损害性能。但是,我的论点并没有围绕性能问题。我的断言是,Linq 在编码和维护领域存在缺陷,如上面第一个链接所述。 BTW Chitresh - 其中一些来自(字面上)几十年来构建大型系统。我踩了很多次粪便,我的脚趾都是棕色的(翻译:我做出了许多后来后悔的技术选择——通常涉及积极采用微软最新的闪亮玩具)。我仍然坚信学习新技术,但我已经开始开发一个非常好的关于新技术的“粪便”检测器。投身于 Linq 听起来像是一个选择,如果有足够的时间,我会后悔的——我想你也会的。 好的..我同意你的观点先生..所以根据你的说法,如果不是 linq to sql,应该在这里使用哪个 orm ......你对流利的 nhibernate 有什么看法?【参考方案4】:

Microsoft 并没有“放弃”Linq-to-SQL 本身,只是没有向它添加主要功能(而不是向 EF 添加功能)。

我倾向于将 ASP.NET MVC 与 Fluent-NHibernate 一起使用。我认为使用这些工具可以很好地平衡灵活性和易用性。但是,如果您对 WebForms 有更多经验,那么使用它会减少您的启动时间。如果您打算直接使用 ADO.NET,除非绝对必要,否则我也倾向于避免使用 DataSet。

【讨论】:

我不介意学习新事物...但我可能只有 3-4 周的时间来提交申请。选择了 ASP.Net MVC.. 但我仍然对数据访问感到困惑.. 任何其他建议请...谢谢 新闻频道网站需要 3-4 周?听起来……雄心勃勃。确保为您的数据访问层提供一个接口,对 ORM 做出决定(考虑到短时间内,我可能会使用 Linq-to-SQL),并且您以后可以随时更改实现。 好吧..谢谢..我是一名年轻的学习工程师......所以有野心......让我们看看......我能实现什么......无论如何,谢谢先生【参考方案5】:

你有 ASP.NET 的经验,我建议你坚持下去,但如果你想学习一些新的东西,那是 ASP.NET MVC 的好方法。

数据访问取决于您的需求和偏好。

LINQ2SQL 和 DataReader/Dataset 使用直接访问数据库,这对于简单的应用程序来说很好。

LINQ2Entities、SubSonic 和 NHibernate 是 ORM 框架,非常适合您将来需要可扩展性的应用程序。

而且最好使用一些存储库模式来访问数据。

【讨论】:

【参考方案6】:

在性能方面,它们都能够处理数千个并发用户。

在任何高流量网站上,最大的性能考虑因素就是缓存。 WebForms/MVC 为输出缓存实际呈现的 html(最有效)和数据对象的 API 缓存提供了极好的选项。

我认为您最好的选择是使用您最擅长开发的数据访问框架——您最熟悉的设计模式/工具集。之后:缓存、缓存、缓存。

【讨论】:

【参考方案7】:

既然您已经熟悉 ASP.NET 和 SQL,何不研究一下 ASP.NET MVC 和 SubSonic。我认为新的 .NET MVC 促进了更简洁和更有条理的代码,而 SubSonic ORM 似乎可以让您快速启动并运行,以便让您的数据库参与您的代码。这是一个链接,可了解有关 SubSonic http://subsonicproject.com/docs/The_5_Minute_Demo 的更多信息。有我的想法! :)

顺便说一句,我个人使用 ASP.NET MVC 和 NHibernate。

【讨论】:

nhibernate 好学吗?先生,您能提供任何有用的链接吗? 嗯,这就是 NHibernate 的缺点。它有一个非常陡峭的学习曲线,但是一旦你完成它就是一个很棒的 ORM!这是一个很好的综合教程,可以帮助您启动并运行blogs.hibernatingrhinos.com/nhibernate/archive/2008/04/01/…。顺便说一句,如果你赶时间,我可能会避免使用 NHibernate 并使用 Linq-to-Sql 之类的东西来开始。这是一个相当不错的基本 ORM。【参考方案8】:

我只是在开发一些东西,现在正处于同一个十字路口。 如果您是一位经验丰富的开发人员,我建议您使用 Asp.net MVC。总的来说,我对此有很好的体验。

考虑到您的 DAL,这有点棘手。

我们确实选择了使用 LINQ to Entities(因为 L2SQL 已被放弃),但我们最终使用了自定义 T4 模板,这些模板从 EDMX 文件生成代码。它工作得很好,我们拥有我们需要的所有可能的定制。但如果我现在必须选择,我可能宁愿选择 Subsonic 3(因为 LINQ to DB 支持和 T4 生成器)或 Fluent nHibernate。我知道 Subsonic 可能不会提供我需要的东西,但我可以自定义模板。另一方面,nHibernate 不支持 LINQ to DB,这是我的偏好。

编辑 如果您问我:LINQ to Entities 基本上是 LINQ to SQL,带有到自定义类型的附加映射。行。还有一些细微的差异,但总的来说就是这样。 MS 正在放弃它似乎很自然。

【讨论】:

我不知道亚音速和休眠.. 它们容易学习吗?我可以花一周时间学习新事物... 亚音速很容易,但 nhibernate 会带你更多。 Bus 从 Fluent nHibernate 开始,您可能会更喜欢它。【参考方案9】:

如果您想要一个简单干净的设计,并且在未来实现和扩展时很有趣,那么请选择 asp.mvc 和实体框架。我将从 asp.net mvc 网站上的电影数据库视频教程开始。

【讨论】:

以上是关于Linq to Sql vs Nhibernate vs SubSonic vs 存储过程(帮助)的主要内容,如果未能解决你的问题,请参考以下文章

Linq to SQL VS 实体框架

用 LINQ to SQL 或 LINQ to EF 替换 NHibernate

NHibernate 或 LINQ to SQL [关闭]

Linq To NHibernate Plus sql 用户定义函数

LINQ to nHibernate - 将 SQL“NOT IN”表达式转换为 LINQ

linq to sql、Entity Framework 和 NHibernate 的性能如何?