【问题标题】:LinqToSQL Design Query / WorryLinqToSQL 设计查询/担心
【发布时间】:2011-10-28 07:35:50
【问题描述】:

我想知道是否有人可以指出我正确的方向。我最近开始玩 LinqToSQL,喜欢强类型数据对象等。

我只是在努力理解对数据库性能等的影响。例如,假设我正在开发一个简单的用户个人资料页面。该页面显示有关用户的基本信息、有关他们最近活动的一些信息以及未读通知列表。

如果我正在为此页面开发存储过程,我可以创建一个 SP,它返回多个数据表,涵盖所有必需的信息 - 从而产生一个 db 调用。

但是,使用 LinqToSQL,这可能会导致多次调用 - 一个用于用户信息,至少一个用于活动,至少一个用于通知,如果我想要更多关于通知的信息,这可能会导致进一步调用 - 多个数据库调用。

我应该担心由于使用这种设计模式而发生的数据库调用的数量吗?即,多个数据库握手等会降低我的数据库等吗?

非常感谢您对此的看法!

谢谢 大卫

【问题讨论】:

  • 我不了解 Linq to SQL - 我更了解 Linq to Entities。理想情况下,任何 ORM 风格的系统都应该缓存调用,以便您只在需要时调用数据库,并尽可能少地进行访问。当然,您可以自己编写服务器端实现来利用这种批处理,而不是强制 ORM 来拆分您的调用(例如,只使用一个存储库/上下文整个请求,并充分利用IEnumerable deferment,而不是调用一堆创建和销毁上下文的函数,并且一直调用ToList
  • 他们也应该利用连接池,所以即使你“关闭连接”,你真的只是将它返回到池中。同样,Linq to Entities 会这样做,我不知道 Linq to SQL 是否会这样做。
  • 我想知道完全相同的事情,为了测试这一点,我创建了一个带有两种方法的简单页面,一种调用 Linq 查询,另一种调用 SQL 存储过程,当这些方法完成时,它们将具有执行完全相同的操作,计时器在方法启动时触发,在方法结束时停止,然后将结果打印到屏幕上,您可能希望尝试类似的方法来测试哪种方法最适合您。我会发布我的结果,但这只是一个附带项目,遗憾的是还没有完成

标签: c# sql-server vb.net linq-to-sql


【解决方案1】:

如果您需要走这条路,LINQ to SQL 可以使用存储过程中的多个结果。不幸的是,设计师在正确映射它们时遇到了问题,因此您可能需要手动创建映射。见http://www.thinqlinq.com/Default/Using-LINQ-to-SQL-to-return-Multiple-Results.aspx

如果您知道每个父记录都需要子记录,则可以将 LINQ to SQL 配置为急切地加载子记录。使用 DataLoadOptions 和 .LoadWith 对其进行配置。

您还可以在 LINQ 查询的 Select 子句中投影具有多个子集合的对象图,以减少您进行的 DB 命中数。

最终,您需要检查多个选项以确定哪条路线最适合您的情况。这不是一刀切的方案。

【讨论】:

    【解决方案2】:

    从性能的角度来看,这是最差的吗?是的,应该是。多次往返通常比一次更糟糕。

    真正的问题是,你介意吗?您的应用程序是否会收到足够的访问以保证存储过程增加的复杂性?还是您更看重未来修改的简单性而不是原始性能?

    无论如何,如果您需要性能,您可以创建一个存储过程并将其映射到您的上下文中。这将为您提供一次调用,但将数据作为对象返回 这是一篇解释该选项的文章: linq-to-sql-returning-multiple-result-sets

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-03
      • 1970-01-01
      • 1970-01-01
      • 2017-08-02
      相关资源
      最近更新 更多