如何为OData-Feed的实体设计包装器
本文关键字:包装 实体 OData-Feed | 更新日期: 2023-09-27 18:15:53
客户的ERP解决方案有一个非常丑陋的数据库结构。它既不为表也不为列使用表达性名称。例如,地址表如下所示:
C001_T001
=========
T001_ID
T001_F001
T001_F002
T001_F003
[...]
- T001_ID为主键
- T001_F001存储标题
- T001_F002存储姓氏
- T001_F003存储名字
- T001_F003存储邮箱地址
- …你明白了
数据库公开了一个OData-Feed,我可以用它来执行数据库操作。
我的想法是,在它周围创建一种包装。因此,查询数据库更有表现力,更有趣,最终更有效率。
// Not cool
ctx.C001_T001s.Where(x => x.T001_F002 == "Smith" && x.T001_F003 == "John")
// Cool!
Addresses.Where(x => x.LastName == "Smith" && x.FirstName == "John")
实现这一目标的可能方法是什么?
简单。我一直都这么做。
- 我通过Odata手工制作将特定实体暴露给那些。
- 我有一个数据管理器,在那里我做SELECT(新实体{}-我基本上项目到新的实体
- 我做投影后的地方。
至少BlToolkit(我在这里的ORM)足够聪明,可以将where子句推入SQL语句,因此我得到了有效的查找和很好的投影。
如果公开OData的服务是基于EF的,那么在EF中这应该非常简单,在模型中您可以重命名属性和实体(与它映射到的列和表相比)。然后OData将从EF中获取名称。