C# 如何避免过多地访问数据库

C# 如何避免过多地访问数据库,c#,asp.net,sql-server,performance,C#,Asp.net,Sql Server,Performance,我有这些课程 class Match { int MatchID, int TeamID, //used to reference Team ... other fields } 注:比赛实际上有2支队伍,这意味着2个队伍ID class Team { int TeamID, string TeamName } 在我的视图中,我需要显示列表以显示团队名称。所以我添加了另一个字段 class Match { int MatchID, int TeamID, //

我有这些课程

class Match
{
  int MatchID,
  int TeamID, //used to reference Team
  ... other fields
}
注:比赛实际上有2支队伍,这意味着2个队伍ID

class Team
{
   int TeamID,
   string TeamName
}
在我的视图中,我需要显示
列表
以显示团队名称。所以我添加了另一个字段

class Match
{
  int MatchID,
  int TeamID, //used to reference Team
  ... other fields

  string TeamName;
}
我现在可以做了

Match m = getMatch(id);
m.TeamName = getTeamName(m.TeamId); //get name from database
但是对于
列表
getTeamName(TeamId)
将转到数据库以获取每个TeamId的TeamName

对于每页10个匹配项的页面,可以是
(10x2Teams)=20
数据库之旅

为了避免这种情况,我想把所有东西都加载一次,存储在内存中,只在内存中查找团队名称。这让我重新思考,如果记录是5000或更多怎么办


有没有更好的方法?谢谢。

请形成每页缓存-将当前10场比赛列表中存在的ID列表放在一起,然后加载拥有其中一个ID的所有团队

您没有说明如何访问数据,但如果您使用的是SQL,那么IN就是您的朋友

select * from teams were id in ('1', '2', '3', '4')

或者,您可以首先使用join语句将您的比赛加载到团队中,然后在填充比赛数据的同时填充团队数据。

我同意目前给出的答案。我只是想详述一下马特的答案。如果您需要对象中的所有数据,那么在一次数据库访问中发出多个sql语句会更有效。这将在一次数据库命中中返回多个表。

您可以做的一件事是在数据库调用中实现分页,以便只检索当前显示页面所需的数字。然后,当单击“下一页”时,这将是另一个数据库调用,以检索下一页的数据,依此类推。对数据库的每次调用都会包含一个页码,以便数据库知道要检索哪个页面。您是否考虑过使用或NHibernate为您管理持久性?它将使事情变得更简单,让您拥有更干净的数据模型,并允许您自动获取相关数据。我同意Pablo的观点-ORM LightSpeed在快速/延迟加载方面做了一些出色的工作。因为机器有不同的规格,我不认为你会得到神奇子弹的解决方案。与PLINQ类似,您必须尝试不同的方法来优化性能。谢谢Ravi。当然,在很多情况下都是这样,但这只是一个例子。你的方法还可以。有了这个,我可以做一次旅行,20张唱片,这就是我想要的。谢谢