Sql server 如何在Azure移动应用程序中使用表控制器访问视图?
我想在Azure Mobile Apps中使用表控制器将我的表指向一个视图,但是,尽管我尽了最大努力,仍然无法获取任何要返回的数据,只是出现了Sql server 如何在Azure移动应用程序中使用表控制器访问视图?,sql-server,node.js,azure,xamarin,azure-mobile-services,Sql Server,Node.js,Azure,Xamarin,Azure Mobile Services,我想在Azure Mobile Apps中使用表控制器将我的表指向一个视图,但是,尽管我尽了最大努力,仍然无法获取任何要返回的数据,只是出现了内部500服务器错误。我遵循了一些文档:但似乎无法获得我的观点 这是我的桌面控制器: mytable.js 据我所知,我们在这里说的是,表名叫做mytable,但我希望它查找一个名为“my_awesome_view”的表,它实际上是一个视图,而不是一个表,但就移动应用程序而言,它应该是好的。然后我们有一些额外的信息,比如每页只返回1000个项目 var t
内部500服务器错误
。我遵循了一些文档:但似乎无法获得我的观点
这是我的桌面控制器:
mytable.js
据我所知,我们在这里说的是,表名叫做mytable
,但我希望它查找一个名为“my_awesome_view”的表,它实际上是一个视图,而不是一个表,但就移动应用程序而言,它应该是好的。然后我们有一些额外的信息,比如每页只返回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;
此代码存储在my azure服务器上的wwwroot/tables/mytable.js
MyDatabase/Views/dbo.my\u awesome\u view
我的视图名为My_awesome_view
,它在一个条件下只回拉几列。我被告知在我的视图中包含由Easy表创建的附加列,这些列是删除的
,创建的数据
,更新的数据
SELECT mytable.id,
name,
deleted,
createdAt,
updatedAt
FROM mytable
WHERE name = 'Bob'
我使用一个名为Postman的应用程序来测试API,当我查询这个端点时https://mybackend.azurewebsites.net/tables/mytable
除了这个500服务器内部错误,我什么也没有得到。错误消息没有关于出错原因的详细信息
有人能帮助解决这个问题吗?如果我删除了表端点的代码,我会感觉它没有到达我的视图
更新
在@AdrianHall给出一些建议后,我查看了应用程序的日志文件,并关闭了动态方案选项。应用程序日志显示以下错误消息:
表格初始化请求过程中出错错误:无法更改“dbo.my\u awesome\u视图”,因为它不是表格。
这是有道理的,因为它是一个视图,但我的理解是,添加我拥有的代码应该允许系统读取我的视图 我让它工作了。我现在可以毫无问题地访问我的视图。问题是,当我创建视图时,我没有添加
version
列。我看到的文档说,您需要确保添加所有列,而不仅仅是一列或两列。我只是错过了这个版本,一旦我添加了它,视图就开始工作,并返回有条件的结果
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
为了确保每个人都知道我做了什么,这里是我的完整源代码:
步骤1
在Azure数据库中创建视图,在我的例子中,我在连接到Azure数据库的本地计算机上使用了SQL Management Studio。创建视图时,请添加以下列:
[版本]
[updatedAt]
[createdAt]
[已删除]
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
在应用程序中创建类。如果像我一样,您正在创建一个Xamarin Forms混合应用程序,那么您需要在共享项目中定义表类。table类应该引用数据来自的表名,而不是视图名,但它仍然应该包含视图调用的列
在本例中,我的视图从mytable
中选择数据,因此我的类名分别为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
现在我们已经有了基础知识,我们需要告诉我们的应用程序查看视图,但将其视为一张表。在我的Azure门户中,我在Azure移动应用程序中使用Easy Tables创建了一个表API,我指定mytable
作为创建API的表,Azure然后为我创建相应的javascript和json文件
单击刚刚创建的表api并选择编辑脚本将直接进入存储javascript文件的wwwroot
。在此,我们将表初始化代码更改为:
var table = require('azure-mobile-apps').table();
table.databaseTableName = 'my_awesome_view';
module.exports = table;
你可以在这里用这个文件做很多事情,Adrian Hall很好地了解了它的功能,还有一个表格控制器功能列表,可以在这里找到:
我还通过将插入
、更新
和删除
更改为禁用
,将读取
保留为允许匿名
就这样!使用类似Postman()的应用程序,您可以直接查询API并返回结果
如果您遇到问题,请确保打开错误日志记录,以便找出问题所在。我让它工作起来了。我现在可以毫无问题地访问我的视图。问题是,当我创建视图时,我没有添加
version
列。我看到的文档说,您需要确保添加所有列,而不仅仅是一列或两列。我只是错过了这个版本,一旦我添加了它,视图就开始工作,并返回有条件的结果
为了确保每个人都知道我做了什么,这里是我的完整源代码:
步骤1
在Azure数据库中创建视图,在我的例子中,我在连接到Azure数据库的本地计算机上使用了SQL Management Studio。创建视图时,请添加以下列:
[版本]
[updatedAt]
[createdAt]
[已删除]
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
在应用程序中创建类。如果像我一样,您正在创建一个Xamarin Forms混合应用程序,那么您需要在共享项目中定义表类。table类应该引用数据来自的表名,而不是视图名,但它仍然应该包含视图调用的列
就我而言,我的vi