WebApiConfig调用MapODataRoute报InvalidOperationException且方法已过时如何解决
问题解决指南
1. 弃用方法替换方案
你用到的MapODataRoute是旧版OData的已弃用API,替换为MapODataServiceRoute扩展方法即可实现完全相同的路由注册效果,需要先引入命名空间System.Web.OData.Extensions,修改后的代码如下:
var builder = new ODataConventionModelBuilder(); builder.EntitySet<Customer>("Customers"); // 替换原MapODataRoute调用 config.MapODataServiceRoute("odata", "odata", builder.GetEdmModel());
2. 报错原因与修复方案
你遇到的报错核心原因是:OData的约定模型构建器将ClassLibrary1.Session识别为复杂类型,而OData默认不允许复杂类型关联实体类型(此处是Session的Customer属性指向了已经注册为实体的ClassLibrary1.Customer),可根据你的业务需求选择以下任意一种方案修复:
- 如果
Session本身也是需要对外暴露的OData资源,直接将其注册为实体集即可:builder.EntitySet<Session>("Sessions"); - 如果不需要对外暴露
Session作为OData资源,可显式忽略Session中关联Customer的属性:builder.ComplexType<Session>().Ignore(s => s.Customer); - 如果你不需要在OData模型中用到
Session类的任何属性,也可以直接给Session类加上[IgnoreDataMember]注解,将其排除在模型构建之外。
内容的提问来源于stack exchange,提问作者Jay Modi
相关产品推荐
相关产品推荐

