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

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

我想在Azure Mobile Apps中使用表控制器将我的表指向一个视图,但是,尽管我尽了最大努力,仍然无法获取任何要返回的数据,只是出现了
内部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