-5

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

我在谷歌上浏览了 linq,我发现这个链接给出了 linq 的简短优点和缺点。

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

  1. DBML 并发问题
  2. 小数据集构建查询所需的时间比执行的时间长
  3. 连接非常慢

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

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

4

2 回答 2

4

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

回答您的问题。

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

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

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

于 2012-12-11T06:14:30.140 回答
1

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

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

要回答您的具体问题,请使用实体框架作为具体示例:

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

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

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

于 2012-12-11T06:24:55.640 回答