Dyl*_*lan 8 c# azure odata azure-mobile-services
我真的用新的基于C#的Azure移动服务打砖墙了,它也非常简单:(我不能为我的生活得到查询操作来返回子属性值.我有todo项目的默认项目修改如下:
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; }
}
Run Code Online (Sandbox Code Playgroud)
然后我将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; }
}
Run Code Online (Sandbox Code Playgroud)
在TodoItemController中,我像这样重写了Query方法
protected override IQueryable<TodoItem> Query()
{
return base.Query().Include(x => x.Numbers);
}
Run Code Online (Sandbox Code Playgroud)
当我向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);
}
Run Code Online (Sandbox Code Playgroud)
请注意,延迟加载和代理创建都已关闭.有谁知道怎么打败这个简单的场景?我感觉不到这个好的共鸣.
更新 因此,我在下面的回答中通过将$ expand添加到查询中来获得服务以返回数据.然而,现在我真的很难让客户端将该参数添加到请求中.它总是只返回基础数据.
var data = await App.MobileService.GetTable<TodoItem>()
.ToListAsync();
Run Code Online (Sandbox Code Playgroud)
将不返回子属性,并且结果类型上没有Include选项
我的错误是没有真正将 OData 部分放入等式中。我一询问
http://localhost:51025/tables/todoitem?$expand=Numbers
Run Code Online (Sandbox Code Playgroud)
代替
http://localhost:51025/tables/todoitem
Run Code Online (Sandbox Code Playgroud)
它神奇地出现了。现在我怎样才能在客户端 API 中看到它......? 更新 我用这段代码在客户端管理它
var json =
await
App.MobileService.GetTable("TodoItem")
.ReadAsync("$expand=Numbers");
JsonConvert.DeserializeObject<TodoItem>(json.First.ToString());
Run Code Online (Sandbox Code Playgroud)
但必须有更好的方法
归档时间: |
|
查看次数: |
1714 次 |
最近记录: |