从特定实体提取数据时,Azure移动客户端会挂起

时间:2016-11-29 21:18:49

标签: c# azure azure-mobile-services

我有一个看起来像的实体:

 public class Category : EntityData
{

    [Index("IX_CategoryName", IsUnique = true), MaxLength(60)]
    public string Name { get; set; }
    public string CreatorId { get; set; }
    [ForeignKey("CreatorId"), JsonIgnore]
    public User Creator { get; set; }
    [JsonIgnore]
    public virtual ICollection<Choice> Choices { get; set; }
    [JsonIgnore]
    public virtual ICollection<UserCategory> Users { get; set; }
    public string Password { get; set; }
    public bool Private { get; set; }
}

我遇到了一些问题检测到属性的自引用循环。我试过了(单独和组合)

 config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling =      Newtonsoft.Json.ReferenceLoopHandling.Ignore;    
 config.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;

但没有运气。所以我选择了[JsonIgnore]标签,你可以在我的实体中看到。据我所知,azure移动服务甚至不会发送嵌套对象,因此没有理由将其序列化。但是,当我尝试提取数据时,该过程永远不会返回。没有超时,没有例外..

奇怪的部分现在来了。如果我用邮递员打电话给我,我会收到回复。

  {
"name": "Food",
"creatorId": "nemtid",
"password": null,
"private": false,
"id": "707cc064-f797-40ee-9ef1-b235e447ff5f",
"version": "AAAAAAAAB9k=",
"createdAt": "2016-11-29T19:58:12.58Z",
"updatedAt": "2016-11-29T19:58:12.58Z",
"deleted": false
}

所以我猜这是客户端问题?..

我不清楚我应该如何调试,所以如果你们有任何线索,无论是如何调试这个,或者另一种修复自我引用循环问题的方法,请告诉我。

编辑: 一方面注意到使这一切更加奇怪。 从我的客户端,如果我拉出所有数据没有问题(代码挂起也没有我用[JsonIgnore]修复的自引用问题。所以我可以在没有JsonIgnore的情况下提取所有数据)我的问题只发生在服务器上使用此方法请求处理程序:

public async Task<IEnumerable<Category>> GetSubscribedCategories(string userId, string subbedCats)
    {
        var res = _context.Categories.Where(c => c.Users.Select(u => u.UserId).Contains(userId));
        return res;
    }

1 个答案:

答案 0 :(得分:0)

所以我通过将我的方法返回值从IEnumerable更改为IQueryable来解决问题。 此外,这也修复了我的参考循环。所以我删除了所有[JsonIgnore]并且它仍在工作。不要问为什么