entity-framework – 如何将OData查询与DTO映射到EF实体?
发布时间:2020-12-16 04:09:03 所属栏目:asp.Net 来源:网络整理
导读:我在Asp.Net Web Api应用程序中有一个允许OData查询的ODataController.我只允许读取,而不是更新.我没有直接公开数据模型,而是创建了一组DTO. DTO上的属性名称不一定与EF模型上的属性匹配.当我尝试对EF模型使用OData查询时,这会导致问题.我已经查看了有关此主
我在Asp.Net Web Api应用程序中有一个允许OData查询的ODataController.我只允许读取,而不是更新.我没有直接公开数据模型,而是创建了一组DTO. DTO上的属性名称不一定与EF模型上的属性匹配.当我尝试对EF模型使用OData查询时,这会导致问题.我已经查看了有关此主题的StackOverflow上的其他帖子,但它们似乎都没有解决此问题.
这就是我现在所拥有的: public IQueryable<Customer> GetCustomer(ODataQueryOptions<Customer> query) { ODataModelBuilder builder = new ODataConventionModelBuilder(); builder.EntitySet<Customer>("Customers"); builder.EntitySet<RECORD>("Records"); builder.Namespace = "MyDataService.Models"; var opts = new ODataQueryOptions<RECORD>(new ODataQueryContext(builder.GetEdmModel(),typeof(RECORD)),this.ActionContext.Request); var records = (IQueryable<RECORD>)opts.ApplyTo(db.RECORDS); return ConvertToCustomerList(records); } 这有效,直到我引用选择或过滤器中的特定字段.当我在OData查询中引用一个字段时,我得到一个类似于ODataException – 无法在类型’MyDataService.Models.RECORD上找到名为’LastName’的属性.这是因为EF属性具有不同的命名约定.在这种情况下,它应该使用“LAST_NAME”. 看起来我需要解析查询,然后用正确的名称替换字段引用.我发现ODataUriParser似乎可以帮助解决这个问题,但它并不像我希望的那样干净. 任何人都可以提供一些解决这个问题的建议吗?有更好的方法吗? 解决方法
WebApi OData新功能模型别名可以解决您的问题.您不必在Edm Model和aDTO之间使用相同的名称.例如,有一个属性名称OrderDto.Total,但在Edm Model中它变为Order.Check
ODataModelBuilder builder = new ODataConventionModelBuilder(); builder.ModelAliasingEnabled = true; EntitySetConfiguration<CustomerDto> customers = builder.EntitySet<CustomerDto>("Customers"); EntitySetConfiguration<OrderDto> orders = builder.EntitySet<OrderDto>("Orders"); orders.EntityType.Name = "Order"; orders.EntityType.Property(p => p.Total).Name = "Check"; return builder.GetEdmModel(); 请参考https://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/OData/v4/中的ODataModelAliasingSample (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – ASP.Net MVC Action方法编译Razor cshtml文
- asp.net-core – 如何使用带有IdentityServer4的ASP.Net标识
- asp.net-mvc – 使用MVC 4和实体框架填充DropDownList
- asp.net – 可能导致XML解析错误:没有找到元素?
- .net – 为什么UseAuthentication必须在.NET Core 2.0中的U
- .net – 使用PowerPivot的MVC 4 WebApi?
- asp.net – 在ASPX中为RadioButtonList设置ListItem值为常量
- asp.net – 如果页面上有异常,则输出缓存无效
- Asp.net对Php性能
- ASP.NET Core技术研究-全面认识Web服务器Kestrel
推荐文章
站长推荐
热点阅读