如何为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-Feed的实体设计包装器

简单。我一直都这么做。

    我通过Odata手工制作将特定实体暴露给那些。
  • 我有一个数据管理器,在那里我做SELECT(新实体{}-我基本上项目到新的实体
  • 我做投影后的地方。

至少BlToolkit(我在这里的ORM)足够聪明,可以将where子句推入SQL语句,因此我得到了有效的查找和很好的投影。

如果公开OData的服务是基于EF的,那么在EF中这应该非常简单,在模型中您可以重命名属性和实体(与它映射到的列和表相比)。然后OData将从EF中获取名称。