【问题标题】:ADO.NET or Linq to SQL?ADO.NET 或 Linq to SQL?
【发布时间】:2011-08-25 02:19:05
【问题描述】:

我正在建立一个论坛,它有 4 个表:用户、主题、评论、主题。

我建立了连接和页面。我开始使用 ADO.net 方式插入数据和选择数据。但后来我发现要进行更复杂的操作,我需要了解 SQL。所以我在寻找另一种方法,我发现我可以打开 Visual Studio 2010,将 Linq 添加到生成对象关系设计器的 SQL 文件中。我阅读了有关如何编写代码的文章,发现我只需要使用带有 DataContext 对象的 using 语句和一个简单的代码来更新、添加、删除表中的行。

我想知道,使用一种查询方式比另一种查询方式有什么优势?

【问题讨论】:

    标签: c# asp.net sql linq ado.net


    【解决方案1】:

    ADO.NET 为您提供对查询的低级别控制。如果查询速度很重要,这就是您想要的。如果您的速度不是很重要,但快速开发和对象关系模型很重要,那么 LINQ to SQL 是一个安全的选择。

    我会推荐 Linq to SQL over ADO.NET。

    1. 发展迅速,以 ORM 方式思考是很自然的。
    2. 如果您的查询速度太慢,使用 .ExecuteQuery 方法将允许您传入已优化的 sql 语句,就像您以 ADO.NET 方式执行它一样。我在 Linq to Sql 方面取得了很大的成功。

    我还想看看实体框架。与 Linq 相比,它使您可以更好地控制对象以及它们的实现、使用和处理方式。

    【讨论】:

    • 我认为你可能不得不硬着头皮学习一些 SQL。 Linq to Sql 可能很古怪。我记得在插入大表时遇到了严重的速度问题。 Linq 的默认查询将执行插入,然后选择它刚刚保存的身份。它比仅仅在 sql 中实现插入要慢得多
    • 使用任何抽象层,您通常会失去一些控制和执行速度......
    • 我会在用户注册后插入用户数据,每次他们点击链接打开话题或添加消息。我将学习 linq to sql,然后如果我看到我失去了很多速度,我将学习 SQL。我正在为我的课程做一个项目..
    • Linq to SQL 应该适合你。
    【解决方案2】:

    LINQ to SQL 是 ADO.NET 技术系列的一部分。它基于 ADO.NET 提供程序模型提供的服务。因此,您可以将 LINQ to SQL 代码与现有的 ADO.NET 应用程序混合,并将当前的 ADO.NET 解决方案迁移到 LINQ to SQL。下图提供了关系的高级视图。


    请参阅以下内容:

    ADO.NET and LINQ to SQL

    Advantages & Disadvantages of LINQ

    Performance of LINQ to SQL over Normal Stored procedure

    LINQ-to-SQL and Stored Procedures

    【讨论】:

    • 哦,谢谢。我想弃权 sql。原因来自我现在正在观看的视频:asp.net/sql-server/videos/creating-and-using-stored-procedures。我可以看到 SQL 是一种全新的语言。我使用 linq(一个小程序)构建了一个应用程序。我只需要知道,如果我选择 linq to sql,我将不受任何限制。如何将 sql 转换为 linq 到 sql? ADO.net 框架的一部分使用 Reader、Dataset 和 linq to sql 等对象,使用 DataContext
    • 只删除旧对象。阅读以下内容:Programming Guide (LINQ to SQL)
    【解决方案3】:

    LINQ to SQL 非常棒,因为它可以为您生成大量的管道代码。但这与直接使用 ADO.NET/SQL 基本相同。要在 LINQ to SQL 中进行更复杂的数据操作,您必须知道如何在 LINQ 中编写复杂的连接,就像在 SQL 中一样。

    查看实体框架 - 它可能会为您提供您正在寻找的更高级别的抽象。

    【讨论】:

    • +1 让 OP 知道复杂性没有捷径可走。你要学习!!
    【解决方案4】:

    除了实体框架,您还可以看看 NHibernate(另一个 .net 对象关系映射器)。它比 EF 存在的时间更长,所以它更成熟一些,但如果这对你很重要,它不是由 Microsoft 开发的。

    【讨论】:

      【解决方案5】:

      两者处于不同的抽象级别。 ADO.NET 是 .NET 中最低级别的数据访问。其他任何东西都会建立在它之上。

      每个抽象都应该赋予您以低级概念为代价来表达高级概念的能力。

      如果我听起来像个哲学家,那是因为现在是星期五。

      【讨论】:

      • 所以如果我处理更高级别的数据,我基本上会失去速度:(..但这确实意味着如果我选择使用 sql 方法,我需要连接复杂的命令语句并学习sql..一种我现在不知道的语言:(
      • 速度损失可能可以忽略不计,但您可能会陷入代码变得非常低效的情况,是的。
      猜你喜欢
      • 1970-01-01
      • 2011-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多