我想知道是否有人可以指出我正确的方向。我最近开始玩LinqToSQL,喜欢强类型数据对象等。
我只是在努力理解对数据库性能等的影响。例如,假设我正在开发一个简单的用户个人资料页面。该页面显示有关用户的基本信息,有关其最近活动的一些信息以及未读通知列表。
如果我正在为此页面开发存储过程,我可以创建一个SP,它返回覆盖所有必需信息的多个数据表 - 从而产生单个数据库调用。
然而,使用LinqToSQL,这可能导致许多调用 - 一个用于用户信息,至少一个用于活动,至少一个用于通知,如果我然后想要有关通知的更多信息,这可能导致进一步调用 - 多个db调用。 / p>
我是否应该担心因使用此设计模式而发生的数据库调用?即,多个数据库握手等会降低我的数据库等吗?
我很感激你对此的看法!
由于 大卫
答案 0 :(得分:2)
如果您需要使用该路由,LINQ to SQL可以使用存储过程中的多个结果。不幸的是,设计师在正确映射它们时遇到了问题,因此您可能需要手动创建映射。见http://www.thinqlinq.com/Default/Using-LINQ-to-SQL-to-return-Multiple-Results.aspx。
如果您知道每个父记录都需要它们,则可以配置LINQ to SQL以急切加载子记录。使用DataLoadOptions和.LoadWith进行配置。
您还可以在LINQ查询的Select子句中投影具有多个子集合的对象图,以减少您执行的数据库命中数。
最终,您需要检查多个选项,以确定哪种路线最适合您的情况。它不是一个适合所有场景的。
答案 1 :(得分:1)
从性能角度来看,这是最糟糕的吗?是的,它应该是。多次往返通常比单身更糟糕。
真正的问题是,你介意吗?您的应用程序是否会获得足够的访问权限以保证存储过程的复杂性?或者您是否重视未来修改对原始性能的简单性?
在任何情况下,如果您需要性能,您可以创建存储过程并将其映射到您的上下文中。这将为您提供一次调用,但将数据作为对象返回 这篇文章解释了一下这个选项: linq-to-sql-returning-multiple-result-sets