我创建了一个SQL视图,可以在我的应用程序的移动后端中使用。可能是因为术语" View"和" MVC",我很难找到可能的解决方案,因为我不断获得MVC视图的链接,而不是SQL视图。
任何人都知道如何创建引用SQL视图的控制器吗?
答案 0 :(得分:2)
您无法为您创建处理此问题的控制器,但我可以提供一个示例,让您了解创建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>
请记住:这是解决此问题的无限列表之一。您可以使用Entity Framework或其他内容,在此示例中,我使用自定义类(StackUserScore)和自定义数据检索(使用SqlCommand)为您提供演示。
我希望这可以帮助你理解。
答案 1 :(得分:1)
@Roberto描述了如何创建SQL视图:
CREATE VIEW StackUserScores AS
SELECT u.Username, s.Score
FROM Users u INNER JOIN UserScores s ON s.UserId = u.Id
拥有SQL View后,您可以使用Azure Mobile Apps SDK在ASP.NET应用程序中创建TableController:
public class TodoItemController : TableController<StackUSerScores>
{
//...
}
StackUserScores必须是DTO - 一个继承自EntityData
的实体类。此外,该视图必须支持Azure移动应用程序所需的相对简单的字段。其中包括:
通过继承EntityData将它们添加到您的DTO中,但您需要在SQL视图中考虑它们,因为SDK无法为您添加它们。人们遇到的最大垮台是id,它需要是一个字符串,而不是一个整数。
显然,作为一个视图,您的视图将是只读的。