如何为使用Code First的应用程序创建SQL视图的控制器?

时间:2016-03-03 08:09:34

标签: c# asp.net-mvc azure-mobile-services

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

任何人都知道如何创建引用SQL视图的控制器吗?

2 个答案:

答案 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移动应用程序所需的相对简​​单的字段。其中包括:

  • [string] id
  • [DateTimeOffset] createdAt
  • [DateTimeOffset] updatedAt
  • [string] version
  • [布尔]已删除

通过继承EntityData将它们添加到您的DTO中,但您需要在SQL视图中考虑它们,因为SDK无法为您添加它们。人们遇到的最大垮台是id,它需要是一个字符串,而不是一个整数。

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