如何为使用代码优先的应用的 SQL 视图创建控制器

本文关键字:应用 SQL 视图 控制器 创建 代码 | 更新日期: 2023-09-27 18:37:13

我创建了一个SQL视图,用于我的应用程序的移动后端。可能是因为术语"视图"和"MVC",我很难寻找可能的解决方案,因为我不断获得指向 MVC 视图而不是 SQL 视图的链接。

有人知道如何创建引用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,它需要是一个字符串,而不是一个整数。

显然,作为视图,您的视图将是只读的。

相关文章: