【发布时间】:2009-12-23 08:59:11
【问题描述】:
我正在讨论为即将到来的 ASP.NET 项目使用什么技术。
假设:
- 我将使用 Visual Studio 2008 SP1 (.NET Framework 3.5)
- 后端将是 SQL Server 2005 数据库(或可能是 2008)
- 代码将用 C# 编写
- 我已经有使用 LinqToObjects 和 LinqToXml 的经验
- 我也有使用 ADO.NET 和一些已经构建的库的经验
- 项目比较小
- 该网站将包含大约五个屏幕
- 数据库可能有六七个表
- 可能会有 25-50 个活跃用户
- 每天的交易量大概在 5-10 次左右
- 将存储最少的个人数据
- 失败或网站被黑客入侵的后果很小
选项:
编写存储过程并使用 ADO.NET 调用它们。填充完
DataSet后,我仍然可以使用 LinqToObjects。利用我对 Linq 的了解来学习 LinqToSql。
分析:
我已经知道如何执行选项 1,但我真的很想专门使用 Linq。选项 2 的问题在于,根据我所阅读的所有内容,LinqToSql 可能会被弃用,而支持实体框架。
问题:
如果您已经熟悉其他 Linq 技术,LinqToSql 的学习曲线有多陡?
鉴于 LinqToSql 可能不会被 Microsoft 进一步开发,是否值得花时间学习 LinqToSql?
了解 LinqToSql 会帮助我有朝一日了解 Entity Framework,还是它们太不一样了?
最终,您会针对我的情况推荐哪个选项?
更新:
我不希望这在 cmets 中丢失:marc_s 指出 LinqToSql 正在进一步开发,至少从 .NET 4.0 开始。链接:http://damieng.com/blog/2009/06/01/linq-to-sql-changes-in-net-40.
我不知道这是否意味着 LinqToSql 有未来,但它确实让学习这项技术更具吸引力。
我在原帖中没有问但应该问的一件事:Entity Framework 中的缺陷是否可能影响这个项目?
感谢到目前为止的回答。
进一步分析
以下是 LinqToSql 缺点的列表,基于以下一些 cmets:
- 在对基础数据库进行更改时,您必须不断更新设计器中的表和项目。无法“刷新”或“同步”它以自动识别更改。
- 由于设计者不会以一致的顺序生成基础文件,因此版本控制变得复杂。
- LinqToSql 设计器生成的代码与 SqlMetal 不同。
- 存在涉及急切加载的问题/错误。
其中,第 1 项是我最关心的问题。即使是一个小项目,改变也是不可避免的。我记得有一次尝试使用 Windows 窗体设计器映射到数据库,但它在我面前炸毁了很多次,我放弃了它,转而使用我自己的 ADO.NET 辅助类。
不过,似乎 SqlMetal 可以完美地满足我的需求。我运行一个命令,它从数据库中重新生成所有内容,我完成了。如果我让我的数据库保持简单(只是表——没有存储过程、视图或函数),也许 SqlMetal 就是我所需要的。
【问题讨论】:
-
它没有死——即使在 .NET 4 中,Linq-to-SQL 也会有所改进。见damieng.com/blog/2009/06/01/linq-to-sql-changes-in-net-40
-
Linq-to-SQL 非常容易学习并且使用起来非常有趣——不像其他 ORM 那样凌乱的 XML 东西,只是一个不错的可视化设计器;没有像 EF 这样的复杂映射 - 每个表只有一个类,而且没有任何意外 - 它可以正常工作!与直接的 ADO.NET 相比,它非常高效
-
@Marc:你对 LinqToSql 的推销太过分了。 DBML 文件是 XML。我个人觉得在使用 LinqToSql 的时候会有很多负面的惊喜。微软提供了相当少的资源来推动 LinqToSql 向前发展,他们已经说了这么多,所以我不确定你为什么不建议这样做?
-
@jfar:另一个:oakleafblog.blogspot.com/2007/08/…
标签: linq linq-to-sql entity-framework ado.net linq-to-objects