我在使用基于C#的Azure移动服务时遇到了困难,与此相关的内容是IT技术。我无法让查询操作返回子属性值,这让我十分苦恼。
我已经修改了默认项目中的待办事项,但是仍然无法解决问题。
public class TodoItem : EntityData
{
public TodoItem()
{
this.Numbers = new Collection<TodoItemNumbers>(new List<TodoItemNumbers>
{
new TodoItemNumbers{Value = 1},
new TodoItemNumbers{Value = 2},
new TodoItemNumbers{Value = 3},
new TodoItemNumbers{Value = 4},
new TodoItemNumbers{Value = 5},
});
}
public virtual ICollection<TodoItemNumbers> Numbers { get; set; }
public string Text { get; set; }
public bool Complete { get; set; }
}
然后我定义了TodoItemNumbers类如下:
public class TodoItemNumbers : EntityData
{
private int _value;
public int Value
{
get { return _value; }
set
{
_value = value;
Id = value.ToString();
}
}
public string TodoItemId { get; set; }
}
在TodoItemController中,我覆盖了Query方法,代码如下:
protected override IQueryable<TodoItem> Query()
{
return base.Query().Include(x => x.Numbers);
}
当我使用Fiddler进行请求时,这些操作都无法返回Numbers属性。在一瞬间的疯狂中,我还修改了控制器的Initialize方法以包含以下内容:
protected override void Initialize(HttpControllerContext controllerContext)
{
base.Initialize(controllerContext);
myContext context = new myContext();
context.Configuration.LazyLoadingEnabled = false;
context.Configuration.ProxyCreationEnabled = false;
DomainManager = new EntityDomainManager<TodoItem>(context, Request, Services);
}
请注意,懒加载和代理创建都已关闭。 有人知道如何在这个简单的场景中胜出吗?我对此并不感觉良好。
更新: 正如我在下面回答的那样,通过在查询中添加 $ expand,我能够使服务返回数据。但是,现在我真的卡在了如何让客户端向请求添加该参数上。它始终只返回基本数据。
var data = await App.MobileService.GetTable<TodoItem>()
.ToListAsync();
该方法不会返回子属性,而且结果类型中也没有包含选项。