如何在 Azure 移动应用程序中使用 table 控制器访问视图?

How do I access a view using a table controller in Azure Mobile Apps?

我想在 Azure 移动应用程序中使用 table 控制器将我的 table 指向一个视图,但是尽管我尽了最大的努力,我还是无法获得任何数据 return,有只是一个 internal 500 server error。我遵循了一些文档:https://shellmonger.com/2016/04/15/30-days-of-zumo-v2-azure-mobile-apps-day-8-table-controller-basics/ 但好像无法达到我的观点。

这是我的 table 控制器:

mytable.js

根据我的理解,我们在这里所说的是 table 名称称为 mytable,但我希望它查找名为 'my_awesome_view' 的 table,它是事实上,视图不是 table,但就移动应用程序而言,它应该没问题。然后我们有一些额外的信息,例如每页仅 returning 1000 个项目。

var table = require('azure-mobile-apps').table();

table.name = 'mytable';
table.schema = 'dbo';
table.dynamicSchema = true;
table.databaseTableName = 'my_awesome_view';
table.maxTop = 1000;

module.exports = table;

此代码存储在 wwwroot/tables/mytable.js

中我的 Azure 服务器上

MyDatabase/Views/dbo.my_awesome_view

我的视图 my_awesome_view 在单一条件下仅返回几列。我被告知在我的视图中包括由 Easy Tables 创建的附加列,它们是 deletedcreatedAtupdatedAt

SELECT  mytable.id,
        name,
        deleted,
        createdAt,
        updatedAt
FROM    mytable 
WHERE   name = 'Bob'

我使用一个名为 Postman 的应用程序来测试 api',当我查询此端点时 https://mybackend.azurewebsites.net/tables/mytable 除了这个内部 500 服务器错误之外,我什么也没得到。错误消息没有关于出现问题的更多详细信息。

任何人都可以帮助解决这个问题吗?如果我删除代码,table 端点工作正常,我感觉它没有到达我的视图。

更新

在@AdrianHall 给出的一些建议之后,我查看了应用程序的日志文件并关闭了动态方案选项。应用程序日志显示以下错误消息:

Error occurred during table initialization RequestError: Cannot alter 'dbo.my_awesome_view' because it is not a table.

这是有道理的,因为它是一个视图,但我的理解是添加我拥有的代码应该允许系统读取我的视图。

我成功了。我现在可以毫无问题地访问我的视图。问题是,当我通过视图创建时,我没有添加 version 列。我看过的文档说您需要确保添加所有列,而不仅仅是一两个。我只是错过了版本,一旦我添加它,视图就开始工作并返回条件结果。

所以为了确保每个人都知道我在这里做了什么是我的完整源代码:

步骤 1 在您的 Azure 数据库中创建您的视图,在我的例子中,我在连接到我的 Azure 数据库的本地计算机上使用了 SQL Management Studio。创建视图时添加以下列:

  • [version]
  • [updatedAt]
  • [createdAt]
  • [deleted]

这是我为创建视图而编写的完整代码。

CREATE VIEW [dbo].[my_awesome_view]
AS
SELECT  id, 
        column_name_1,
        column_name_2,
        column_name_3,      
        [version],  
        updatedAt,
        createdAt,
        deleted 

FROM    mytable 
WHERE   (column_1 = 'Bob' OR
         column_2 = 'Smith' OR
         column_3 = 'Jr')

GO

步骤 2

在您的应用中创建您的 class。如果您像我一样正在创建 Xamarin Forms 混合应用程序,那么您需要在共享项目中定义 table class。 table class 应该引用数据来自的 table 名称而不是视图名称,但它仍应包括视图调用的列。

在我的例子中,我的视图从 mytable 中选择数据,所以我的 class 名称分别是 mytable.cs

namespace MyApp
{
    public class mytable
    {
        public string id { get; set; }
        public string column_1 { get; set; }
        public string column_2 { get; set; }
    }
}

步骤 3

现在我们已经掌握了基础知识,我们需要告诉我们的应用查看视图,但将其视为 table。在我的 Azure 门户中,我在我的 Azure 移动应用程序中使用 Easy Tables 创建了一个 table API,我指定 mytable 作为 table 来创建 api, Azure 然后为我创建相应的 javascript 和 json 文件。

单击您刚刚创建的 table api 并选择 Edit Script 将直接进入存储 javascript 文件的 wwwroot。从这里我们将 table 初始化代码更改为以下内容:

var table = require('azure-mobile-apps').table();
table.databaseTableName = 'my_awesome_view';       
module.exports = table;

您可以在此处使用此文件做很多事情,Adrian Hall 深入探讨了它的功能以及 table 控制器功能列表,可在此处找到:https://shellmonger.com/2016/04/15/30-days-of-zumo-v2-azure-mobile-apps-day-8-table-controller-basics/

我还通过将 insertupdatedelete 更改为 disabled 但将 Read 作为 Allow anonymous

就是这样!使用像 Postman (https://www.getpostman.com/) 这样的应用程序,您可以直接查询 API 并取回结果。

如果遇到问题,请确保打开错误日志记录,以便找出问题所在。