一个简单的问题,Win 8.1通用类库中是否不支持此功能?或者如果是的话,任何人都可以帮助我做错了。
http://jbsapplication.azurewebsites.net/Modules?$filter=Name%20eq%20'JBS%20Electronic%20forms'&$expand=Menus
当我从浏览器或Fiddler这样做时,我收到了正确的回复。
我在客户端视图模型类中的代码如下(使用OData Client v2代码生成的对象)
var application = new UriBuilder(ServiceBaseAddress);
var context = new Models.Application(application.Uri);
var modulesQuery = context.Modules.Expand(m=>m.Menus).Where(m => m.Name == ApplicationName);
var modules = await ((DataServiceQuery<Module>) modulesQuery).ExecuteAsync();
_currentModule = modules.FirstOrDefault();
在最后一行生成以下异常
类型&#39; Microsoft.OData.Core.ODataException&#39;的第一次机会异常。发生在Microsoft.OData.Core.DLL
中附加信息:编写JSON响应时,必须指定用户模型,并且必须将实体集和实体类型传递给ODataMessageWriter.CreateODataEntryWriter方法,或者必须在正在写入的ODataEntry或ODataFeed上设置ODataFeedAndEntrySerializationInfo。
如果我删除请求的展开部分,一切都很好,但我需要再执行一次往返获取菜单。
Module类的减少参考:
[Key("Id")]
public class Module: BindableBase
{
public string Name
{
get { return _name; }
set { SetProperty(ref _name, value); }
}
DataServiceCollection<Menu> _menus = new DataServiceCollection<Menu>(null,TrackingMode.AutoChangeTracking);
public DataServiceCollection<Menu> Menus
{
get { return _menus; }
set
{
_menus = value;
OnPropertyChanged("Menus");
}
}
}
答案 0 :(得分:5)
当我忘记将扩展实体作为EntitySet添加到ODataModelBuilder时,我遇到了您描述的问题。在ASP.NET OData Web API中尝试这个:
builder.EntitySet<Menus>("Menus");
答案 1 :(得分:0)
具有ID属性的模型需要由客户端显式扩展,并且需要将可扩展模型注册为实体集,并使用自动生成的OData客户端的构建器来调用expand。