OData Expand在Client Win8.1通用应用程序上失败

本文关键字:应用 应用程序 程序上 失败 1通 Expand Client Win8 OData | 更新日期: 2023-09-27 18:26:27

只是一个简单的问题,这在Win 8.1通用类库中不支持吗?或者,如果是的话,有人能帮我做错事吗。

http://jbsapplication.azurewebsites.net/Modules?$filter=Name%20eq%20'JBS%20Electronic%20forms'&$expand=Menus

当我从浏览器或Fiddler执行此操作时,我会收到正确的响应。

我在客户端视图模型类中的代码如下(使用ODataClientv2代码生成的对象)

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();

在最后一行上生成以下异常

Microsoft.OData.Core.DLL 中首次出现"Microsoft.OData.Core.ODataException"类型的异常

附加信息:写入JSON响应时,必须指定用户模型,并且必须将实体集和实体类型传递给ODataMessageWriter.CreateODataEntryWriter方法,或者必须在正在写入的ODataEntry或ODataFeed上设置ODataFeedAndEntrySerializationInfo。

如果我删除了请求的扩展部分,一切都很好,但我需要执行另一次往返以获取菜单。

模块类的精简参考:

[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");
        }
    }
}

OData Expand在Client Win8.1通用应用程序上失败

当我忘记将扩展实体作为EntitySet添加到ODataModelBuilder中时,我遇到了您描述的问题。在ASP.NET OData Web API中尝试此操作:

builder.EntitySet<Menus>("Menus");

具有ID属性的模型需要由客户端显式扩展,并且可扩展模型需要在生成器中注册为实体集,以便自动生成的OData客户端能够调用expand。