如何在 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 创建的附加列,它们是 deleted
、createdAt
、updatedAt
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/
我还通过将 insert
、update
和 delete
更改为 disabled
但将 Read
作为 Allow anonymous
就是这样!使用像 Postman (https://www.getpostman.com/) 这样的应用程序,您可以直接查询 API 并取回结果。
如果遇到问题,请确保打开错误日志记录,以便找出问题所在。
我想在 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
MyDatabase/Views/dbo.my_awesome_view
我的视图 my_awesome_view
在单一条件下仅返回几列。我被告知在我的视图中包括由 Easy Tables 创建的附加列,它们是 deleted
、createdAt
、updatedAt
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/
我还通过将 insert
、update
和 delete
更改为 disabled
但将 Read
作为 Allow anonymous
就是这样!使用像 Postman (https://www.getpostman.com/) 这样的应用程序,您可以直接查询 API 并取回结果。
如果遇到问题,请确保打开错误日志记录,以便找出问题所在。