2016-11-29 72 views
0

拉取数据时,我有,看起来像一个实体:Azure的移动客户端挂起向特定对象

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

这是一个实体框架问题比移动应用程序问题更多。编辑中的代码实际上并不使用任何移动应用程序SDK的内容。建议您重新标记特定的实体框架受众。 –

+0

但问题是,当我调试服务器,我可以看到正确的数据,如果拉和返回。此外,如果我通过Postman手动发出请求,我也会得到正确的返回数据。这就是使这件事很难处理的原因。 – sirius

+1

因此,您已经裁定服务器上的Azure移动应用程序代码正在做正确的事情。您可以假设您正在从客户端调用的服务器上的自定义API?你的代码在这方面不完整,所以我只能假设。 –

回答

0

所以我从IEnumerable中改变我的方法的返回值IQueryable的解决了这一问题。 此外这也解决了我的参考循环。所以我删除了所有的[JsonIgnore],它仍然在工作。不要问为什么