Azure WebJobs 和模型以及 SQL 查询
Azure WebJobs and models and SQL queries
我有一个用作 restful API 的 Azure Web 应用程序。这个后端定义了我的系统正在使用的模型:用户、团队、项目、项目。一个User可以加入多个Team,Team-->Project-->Item结构是Grandparent-->Parent-->Child关系
我想为每个用户设置每日更新的电子邮件摘要。我希望它在后台的 Azure Web 作业中 运行,以免给面向客户的 API 服务器增加负担。
在 API 的控制器中编写代码时,我可以像这样编写简单的查询来获取属于某个团队的所有项目(因为模型及其层次关系在 API):
var items = await (from x in db.Items
where x.Project.Team.TeamId == teamId
select x).ToListAsync();
然而,在网络工作中,我不能那样做——没有模型可言。我看到几个选项:
选项 A) 以某种方式在 Web 作业中使用(或重新创建)模型(和数据库上下文?)。如果这是可能的(而且不是一个糟糕的想法),我想这就是我想要的。
选项 B) 与 Web 作业中的许多冗长 SQL 查询和平相处。我可以向用户 table 查询他们所属的团队。然后,对于每个团队,我可以在项目 table 中查询一组项目。然后,对于每个项目,我可以查询项目 table 以获取每个项目中的项目。
有没有办法制作一个比选项 B 多次调用数据库更有效的神奇 SQL 查询?我试过类似下面的方法,但没有找到可行的方案:
SELECT * FROM Items WHERE Projects WHERE Teams = teamId;
嗯,看来我想要的是 JOIN:What's the difference between INNER JOIN, LEFT JOIN, RIGHT JOIN and FULL JOIN?
我真的只用过 LINQ 从 SQL 数据库中提取数据,现在我知道如何用老式的、更冗长、更不直观的方法来做:)
这是我用来提取属于给定团队的所有项目的代码:
SqlCommand command = new SqlCommand();
command.CommandText = @"SELECT Items.* FROM Items
JOIN Projects
ON Projects.ProjectId = Items.ProjectId
JOIN Teams
ON Teams.TeamId = Projects.TeamId
WHERE Teams.TeamId = '" + teamId.ToString() + "'";
我认为最好的方法是选项 C) - 重构您的解决方案并创建单独的项目,其中将包含数据上下文、模型和所有迁移。之后,您可以从您的主应用程序和 WebJob 引用该项目。您还可以将一些与数据库相关的核心功能移动到此项目中,以便从其他项目访问它们。
我有一个用作 restful API 的 Azure Web 应用程序。这个后端定义了我的系统正在使用的模型:用户、团队、项目、项目。一个User可以加入多个Team,Team-->Project-->Item结构是Grandparent-->Parent-->Child关系
我想为每个用户设置每日更新的电子邮件摘要。我希望它在后台的 Azure Web 作业中 运行,以免给面向客户的 API 服务器增加负担。
在 API 的控制器中编写代码时,我可以像这样编写简单的查询来获取属于某个团队的所有项目(因为模型及其层次关系在 API):
var items = await (from x in db.Items
where x.Project.Team.TeamId == teamId
select x).ToListAsync();
然而,在网络工作中,我不能那样做——没有模型可言。我看到几个选项:
选项 A) 以某种方式在 Web 作业中使用(或重新创建)模型(和数据库上下文?)。如果这是可能的(而且不是一个糟糕的想法),我想这就是我想要的。
选项 B) 与 Web 作业中的许多冗长 SQL 查询和平相处。我可以向用户 table 查询他们所属的团队。然后,对于每个团队,我可以在项目 table 中查询一组项目。然后,对于每个项目,我可以查询项目 table 以获取每个项目中的项目。
有没有办法制作一个比选项 B 多次调用数据库更有效的神奇 SQL 查询?我试过类似下面的方法,但没有找到可行的方案:
SELECT * FROM Items WHERE Projects WHERE Teams = teamId;
嗯,看来我想要的是 JOIN:What's the difference between INNER JOIN, LEFT JOIN, RIGHT JOIN and FULL JOIN?
我真的只用过 LINQ 从 SQL 数据库中提取数据,现在我知道如何用老式的、更冗长、更不直观的方法来做:)
这是我用来提取属于给定团队的所有项目的代码:
SqlCommand command = new SqlCommand();
command.CommandText = @"SELECT Items.* FROM Items
JOIN Projects
ON Projects.ProjectId = Items.ProjectId
JOIN Teams
ON Teams.TeamId = Projects.TeamId
WHERE Teams.TeamId = '" + teamId.ToString() + "'";
我认为最好的方法是选项 C) - 重构您的解决方案并创建单独的项目,其中将包含数据上下文、模型和所有迁移。之后,您可以从您的主应用程序和 WebJob 引用该项目。您还可以将一些与数据库相关的核心功能移动到此项目中,以便从其他项目访问它们。