OData与WCF数据服务/实体框架

时间:2013-01-15 21:25:05

标签: wcf entity odata asp.net-web-api user-defined

提前道歉,这是一个很长的问题。

(TL; DR:有没有人对使用EF与使用WCF数据服务/ OData公开的动态字段有任何建议)

我遇到了WCF数据服务和EF的一些概念问题,特别是将某些数据暴露为OData服务。

基本上我的问题是这个。我公开的数据库允许用户动态添加字段(用户定义的字段),并使用一个系统将这些字段直接添加到底层SQL表中。此外,当您想要向表中添加数据时,您不能使用直接SQL,您必须通过它们提供的API。 (这是SAP Business One,fwiw)。

我已经成功构建了一个通过XML公开各种对象的系统,并允许客户端通过发送XML消息来更新或添加新实体到SBO中,虽然它运行良好但它并不适合移动应用程序,因为它非常XML -heavy和入口点是一个古老的skool asmx webservice。我想尝试将其用于移动开发,并将Odata与WCF或Web API一起使用。 (我知道我可以更改为WCF服务,允许处理JSON格式的请求,并开始返回JSON数据,但似乎必须有更多...本机...方式)

最初,我已经打消了使用EF的可能性,因为a)动态字段和b)EF只能是只读的;添加/更新实体必须被拦截并路由到SBO DI服务器。但是,我回过头来思考它,并且正在寻找一些关于如何接近的建议(否定或其他!)。

我基本上想做的是这个

  • 将来自SBO的基表(除非他们自己发布补丁时不会更改)作为EF实体公开,具有所有通常的关系良好性。事实上,我实际上不会直接暴露表格,我将使用一组过滤的SQL视图作为数据源,因为这与我们做的其他各种事情有关,只允许将某些数据暴露给第三方。

    < / LI>
  • 公开特定用户添加的任何UDF作为每个实体的某种EAV子集合。

  • 拦截对ADD或UPDATE对象的任何请求,并通过我用于连接SAP数据导入服务的现有引擎来路由这些请求。

我想我的主要问题是这个;假设我实现了一个代表销售订单的EF实体,该销售订单包含一个Header和Details集合。对于这些类中的每一个,我都会使用用户定义的字段和值的EAV类型集合。允许OData过滤系统直接在EAV集合上工作涉及多少工作(例如,客户端能够要求服务/订单/ $ filter = SomeUdfField eq SomeValue 其中此请求必须传递到Order header实体的

的EAV集合中

或者,例如,是否可以动态地从某种元数据生成EF模型(我不介意如何 - 代码生成或模型构建库)这意味着我可以公开每个实体,dyanmic包括哪些字段,作为适当的EF模型?非常感谢你如果你读到这里:)

1 个答案:

答案 0 :(得分:2)

对于现有EF上下文的基本问题,WCF数据服务运行良好。只要您想添加一些自定义功能,如上所述,它需要更多的工作。

您所描述的内容是可能的,但您需要构建自己的custom data provider来处理动态生成元数据以及自定义挂钩到添加/更新/删除。

可能值得研究WCF Data Services Toolkit,它是一个自定义提供程序,它在WCF数据服务上使用存储库模式以便于使用,但它不提供自定义元数据生成。