如何为OData-Feed的实体设计包装器?

时间:2011-11-24 15:53:13

标签: c# .net linq odata software-design

客户ERP解决方案(imho)是一个非常丑陋的数据库结构。它既不使用表也不使用表达式的名称。例如,地址表如下所示:

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")

实现这一目标的可能方法有哪些?

2 个答案:

答案 0 :(得分:1)

SImlpe。我一直这样做。

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

至少BlToolkit(我在这个地方的ORM)非常聪明,可以将where子句推送到SQL语句中,因此我可以获得高效的查找和良好的预测。

答案 1 :(得分:1)

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