Azure移动应用服务& EF表格列限制?

时间:2018-01-10 15:50:58

标签: entity-framework azure odata azure-mobile-services

我正在使用Odata和Entity Framework的Azure Mobile应用服务。我有大约90列的表,除非我注释掉数据模型中的一些列,否则它不起作用。如果包含所有列,那么我注释掉查询的列将无效。

azure移动服务调试器告诉我: “EntityFramework.dll中发生了'System.StackOverflowException'类型的未处理异常”odata查询工作正常并返回200 ok但是EF与SQL(它是一个天蓝色的sql服务器)交谈有一个怪胎并且永远不会返回任何内容。直到我从数据模型中删除一些列。

这只是开箱即用的数据模型和tablecontrollers,我正在使用Postman发送查询。我在此服务中有20个其他表可以完美运行。我无法根据您可以使用的列数找到大小限制或任何内容。任何帮助都很棒。

邮差给了我: “502 - Web服务器在充当网关或代理服务器时收到无效响应”,但这太过于通用而无法跟踪。查看了所有可能的天蓝色日志。只是说有一个错误

2 个答案:

答案 0 :(得分:0)

我建议您Enable diagnostics logging为您的移动应用收集详细的错误消息。此外,您可以修改TableController并记录详细的SQL语句,如下所示:

protected override void Initialize(HttpControllerContext controllerContext)
{
    base.Initialize(controllerContext);
    var context = new MobileServiceContext();

    //add this line
    context.Database.Log += (msg) =>
    {
        System.Diagnostics.Trace.TraceInformation($"{msg}{Environment.NewLine}");
    };
    DomainManager = new EntityDomainManager<Message>(context, Request);
}

此外,您可以通过SSMS执行相关的SQL语句,并检查查询执行计划以缩小此问题。此外,对于您的移动客户端,您只能从远程表中检索特定列。这是C#的代码片段:

var query =
    from r in table.CreateQuery()
    select new { r.Text, r.Complete, r.UpdatedAt, r.Version };

答案 1 :(得分:0)

经过8个月的随机尝试,我实际上开始工作了!

与其直接从内置于AzureMobileServiceServer命名空间的帮助器中返回IQueryable,而是将其转换为IEnumberable,然后重新选择所有内容,然后将其更改回IQueryable。不知道为什么这行得通,但它消除了否则会发生的stackoverflow问题。我认为这在离线同步时会增加一些时间,但如果可以,我会接受。

public IQueryable<ItemLibrary> GetAllItemLibrarys()
   {
       //return Query(); //!!!this is the original from the table controller
       return Query().AsEnumerable().Select(s => s).AsQueryable(); //!!!replace with this
   }