2011-11-30 76 views
0

我创建使用WCF数据服务和Entity Framework 4.1的代码首先服务。我有一个要求基于uri段做一些过滤。基本上,我们有一个多租户数据库,并且需要将租户id的字符串表示作为uri的一部分进行传递。例如,一个URI会是这个样子:WCF数据服务与自定义过滤器

http://myservice.com/client123/Users 

Client123将被用来创建上下文过滤以只该客户端的数据。

我被指向OData示例代码的方向http://www.odata.org/developers/odata-sdk我看到的代码中正在创建和使用sessionid缓存默认数据(我也添加了会话管理的逻辑)。然而,它是用DSPContext等方式完成的,似乎很多情况下不需要基于实体框架的实现。 (至少我的理解是,如果你使用实体框架,创建自定义上下文不应该被要求。)

有没有人知道使用基于标准实体框架的数据源来做这种实现的好例子?或者,您可否告诉我如何修改现有的sdk代码?我主要停留在元数据创建(这甚至需要?)和资源创建。

最好的问候,并在此先感谢!

+0

我真的坚持了这一点。我也尝试通过注册一个serviceroute来实现这条路线。问题在于占位符在服务路线中似乎不受支持。 请帮忙! :-D – RockyMountainHigh

回答

0

如果您使用基于EF服务,而该服务将永远看起来是一样的,无论客户端ID,那么你不需要任何花哨的自定义提供。只是使用的伎俩从SDK,以获得正确的客户ID,露出一个“正常”的基础EF WCF服务DS,并在DataService.CreateDataSource清除使用客户端ID创建客户端正确的EF上下文。

+0

感谢您的快速响应。然后,我会做一个uritemplate匹配来提取id并传递它?我认为(知道)我错过了一些显而易见的东西。 – RockyMountainHigh

+0

在您的重写CreateDataSource你需要以某种方式获得客户端ID。有几种方法(取决于你确切的主机)。一种方法是检查请求URI并从那里获取。另一个可能是SDK示例在会话中使用的技巧。 –

+0

我能够通过使用uriteplate并获取边界参数来获得所需的内容。但是,我仍然得到了client123找不到的资源。 – RockyMountainHigh