1

我正在使用 CoolStorage 作为 ORM,并且对查询数据库的频率有疑问。

我正在返回一个团队列表,并且还想显示每个团队中包含的用户数量。我正在通过调用返回团队,Team.List()并且有 2 个选项我可以考虑如何返回用户数量。一种是向 Team 类添加一个属性,该属性返回其 [OneToMany] SysUsers 的计数,另一种是对Team.List(). 下面的代码演示了这两种方法,它们都返回相同的结果。

我试图了解这如何影响数据库交互,例如它会首先返回一个团队列表,然后对每个团队运行一个单独的查询以获取用户数量吗?如果我想再添加 2 个或 3 个字段,它会为每个附加字段运行另一个单独的查询吗?这两种方法有什么区别吗?

我担心的是,如果连接不好,即使是简单的查询也可能没有响应。

CoolStorage 中存在运行即席 SQL 查询的选项,对于更复杂的查询,我是否最好这样做?还是我什么都不担心?

CSList<Team> teams = Team.List();

// Counting number of objects
var d = from t in teams
        select new
        {
            TeamID = t.TeamID,
            TeamName = t.TeamName,
            NoUsers = t.SysuserTeams.Count
        };

// Using property added to Team class
var e = from t in teams
        select new
        {
            TeamID = t.TeamID,
            TeamName = t.TeamName,
            NoUsers = t.NumberOfUsers
        };

DataGridView dgv = this.dgvTeams;
dgv.DataSource = d.ToList();
// Same result as 
dgv.DataSource = e.ToList();
4

1 回答 1

1

从生成的 SQL 日志中看到它正在为 Teams 结果中的每一行运行一个新查询,我联系了 CoolStorage 开发人员,他们友好地回应了一个简洁的解决方案。

有两个选项,OneToMany属性 forSysusers可以标记为,[Prefetch]或者可以为每个查询明确指定,例如Team.List().WithPrefecth("Users"). 无论哪种方式,它现在只对用户记录运行一个附加查询,而不是每行一个查询

于 2012-12-20T11:22:03.933 回答