如何为使用代码优先的应用的 SQL 视图创建控制器
本文关键字:应用 SQL 视图 控制器 创建 代码 | 更新日期: 2023-09-27 18:37:13
我创建了一个SQL视图,用于我的应用程序的移动后端。可能是因为术语"视图"和"MVC",我很难寻找可能的解决方案,因为我不断获得指向 MVC 视图而不是 SQL 视图的链接。
有人知道如何创建引用SQL视图的控制器吗?
您无法创建为您处理此问题的控制器,但我可以提供一个例子来让您了解创建 MVC 视图和检索相关数据的含义。
假设您有如下例所示的 SQL Server 视图:
CREATE VIEW StackUserScores AS
SELECT u.Username, s.Score
FROM Users u INNER JOIN UserScores s ON s.UserId = u.Id
在可以创建可显示所有数据的对象视图后:
public class StackUserScores {
public string Username { get; set; }
public int Score { get; set; }
}
现在,您可以在 asp.net MVC 项目中创建一个名为 UsersController
的新控制器。此控件将包含与用户相关的所有actions
:
public class UsersController : Controller {
public ActionResult Scores() {
var connectionString = "your db connection";
var connection = new SqlConnection(connectionString);
connection.Open();
var command = connection.CreateCommand();
command.CommandType = CommandType.Text;
command.CommandText = "SELECT * FROM StackUserScores";
var reader = command.ExecuteReader();
var scores = new List<StackUserScores>();
while( reader.Read()) {
scores.Add(new StackUserScore {
Username = reader.GetString(0),
Password = reader.GetInt(1)
});
}
return View(scores);
}
}
你的视图(这将是~/Views/Users/Scores.cshtml中的位置)将是这样的:
@model List<StackUserScore>
<table>
<thead>
<tr><th>Username</th>
<th>Score</th>
</tr>
</thead>
<tbody>
@foreach(var userScore in Model) {
<tr><td>@userScore.Username</td>
<td>@userScore.Score</td>
</tr>
}
</tbody>
</table>
请记住:这是解决此问题的无限方法列表之一。您可以使用实体框架或其他东西,在此示例中,我为您提供了一个使用自定义类(StackUserScore)和自定义数据检索(使用SqlCommand)的演示。
我希望这可以帮助您理解。
@Roberto描述了如何创建SQL视图:
CREATE VIEW StackUserScores AS
SELECT u.Username, s.Score
FROM Users u INNER JOIN UserScores s ON s.UserId = u.Id
拥有 SQL 视图后,可以使用 Azure 移动应用 SDK 在 ASP.NET 应用程序中创建表控制器:
public class TodoItemController : TableController<StackUSerScores>
{
//...
}
StackUserScores必须是DTO - 继承自EntityData
的实体类。 此外,视图必须支持 Azure 移动应用所需的相对简单的字段。 其中包括:
- [字符串] ID
- [日期时间偏移量] 创建于
- [日期时间偏移量] 更新于
- [字符串] 版本
- [布尔值] 已删除
这些内容通过继承自实体数据添加到 DTO 中,但您需要在 SQL 视图中考虑它们,因为 SDK 无法为您添加它们。 人们遇到的最大缺点是id,它需要是一个字符串,而不是一个整数。
显然,作为视图,您的视图将是只读的。