是否应该使用 Linq? [关闭]

Posted

技术标签:

【中文标题】是否应该使用 Linq? [关闭]【英文标题】:Should use Linq or Not? [closed] 【发布时间】:2012-11-28 15:38:49 【问题描述】:

我正在设计我的项目架构。 在我们的团队讨论是否使用 Linq。

我在 Google 上浏览有关 linq 的信息,我发现了这个 link,它简要介绍了 linq 的优缺点。

从我们项目的角度来看,有 3 个关键点。

    DBML 并发问题 小数据集构建查询所需的时间比执行要长 连接速度很慢

我正在谈论 Linq to Entity。所有这些都是与 Linq 相关的问题,根据我的项目要求,这是至关重要的问题,因为我的项目很大。 所以性能是非常重要的关键因素。

我们可以解决这些 linq 问题吗?如果是,如何解决?

【问题讨论】:

太模糊了。提出一个具体的技术问题。 @OliverBock 有什么模糊之处??你不明白什么? 您打算使用 linq-to-xml 吗? linq 到 sql ? linq 到对象?在做出明智的决定之前,有很多因素需要考虑。 Linq 本身可以用来做各种各样的操作。人们无法根据理论对项目给出一般性建议。 @ryadavilli 正在计划 Linq-to-sql 如果性能实际上是重要的因素,如果使用 LINQ 有用,您会尝试多种方法并自己找到答案。就目前而言,这个问题无法回答 - 任何问题都可以解决,但没有人能够判断某些特定技术是否适合您的项目。 【参考方案1】:

我阅读了该帖子中的一些回复,我必须同意和不同意其中的很多。我发现使用 linq 的最重要因素是开发时间的快速周转。 SQL 查询中不再有拼写错误。不要浪费时间创建复杂的 SQL 查询。 linq to entity 和 linq to sql 也有区别。你没有考虑到这一点。我建议你阅读它。提示:使用 linq 到实体。

回答您的问题。

    我没有将并发问题与 linq(与实体)联系起来。这就是你实现它的方式。如果您需要(批量)更新的原始速度,您可以随时使用 ADO.NET。

    如果您仔细构建 linq 查询,您只会提取您需要的数据。如果您担心 linq 在构建查询时会影响性能,您可以创建已编译的 linq 查询。

    如果您创建一个包含所有关系的适当模型,则连接不会很慢。

【讨论】:

【参考方案2】:

与往常一样,这个问题的答案是视情况而定。这几天的方向肯定是pro-ORM。虽然您肯定可以通过存储过程或直接 sql 命令对性能和原子记录更新进行更多控制,但以我个人的经验,这些好处被您花费在维护/更新模式和过程上的时间量所抵消。对于敏捷团队来说,这可能是一个很大的减速。使用强类型 ORM 工具(如 Entity Framework 或 N-Hibernate)的另一个主要好处是,您可以防止代码与数据库模式和存储过程严重偏离。这可能会导致一些非常大的问题。

一般来说,我会在使用 ORM 工具时出错,然后在必要时使用存储过程。

回答您的具体问题,以实体框架为例:

    Entity Framework 4 有一些工具可以帮助处理OptimisticConcurrencyExceptions。您可以尝试自行解决或将异常抛入堆栈。 这可能是一个微优化。一般来说,实体框架非常快。在遇到障碍之前,您更有可能处理 I/O 问题。 如果您正在使用数据库进行大量往返或延迟加载,则连接可能会很慢。 Entity Framework 还支持eager-loading,因此所有事情都可以在一个查询中完成。

最终,如果归根结底,您始终可以在需要时使用存储过程。当我有很多需要排他行锁的并发操作时,我会这样做。

我看到 EntityFramework 的一个缺点是有时使用 Postgres 会出现问题,但有非 Visual Studio 工具可以提供帮助。

【讨论】:

以上是关于是否应该使用 Linq? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

我的数据库连接是否关闭? (Linq to Sql)

C#将字典的LINQ查询重构为单个lambda表达式[关闭]

Windows 窗体控件和 LINQ;我应该返回啥?

使用 Linq To SQL 时,我是不是应该在 BLL 类中使用数据访问和业务逻辑

SQL to LINQ 工具 [关闭]

使用 linq 填充 DataTable 对象 [关闭]