如何创建Odata / EF Web服务的2个版本?

时间:2012-09-26 09:22:01

标签: c# entity-framework wcf-data-services odata

我使用EF提供商提供Odata服务。我工作正常,很容易创建。但现在它需要改变。此问题与this one类似。但我不清楚答案。

我需要能够同时提供服务的两个(或更多)版本,因为无法一次更新所有客户端。我想首先继续使用EF代码(因为它直到现在都很容易),但这不是必需的。我只有很少的服务,所以我不介意重写,如果这将给我所需的灵活性。

使用c#实现Odata服务的最佳(最简单和可维护)方法是什么,它可以从同一个数据库中同时支持同一服务的多个版本。

我尝试使用反射提供程序转换EF dbcontext。我想要这样的东西:

db -> EF db context -> reflection DB context.v1 -> DataService.v1

db -> EF db context -> reflection DB context.v2 -> DataService.v2

如果只有EF选择允许ToList()

,我几乎可以使用(至少读取)

我确实需要支持写(对于某些服务)

将2个EF db上下文定位到同一个数据库将是一个可接受的解决方案,但我不知道是否以及如何实现此目标。

提前致谢

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法,我想分享一下。有关我的解释外观at this blog post的详细描述。

我的解决方案基于三个项目:

  • 一个网站项目,包含映射到我的数据库的“ef dbcontexts”,它为我的站点提供数据并帮助迁移数据库。在这个项目中,我为每个版本的服务提供了dataservice.svc类。
  • 一个serviceV1类库项目,包含另一个EF dbcontext,它在当前数据库和此服务版本的dto之间进行映射。映射(调整)直接在datacontext
  • 中使用流畅的API完成
  • 一个serviceV2类库项目,包含另一个EF dbcontext,它在当前数据库和此服务版本的dto之间进行映射。

服务项目中的datacontext设置为不迁移数据库并使用以下语句忽略架构差异:

Database.SetInitializer<ServiceV1.MyDbContext>(null);

希望这有助于任何人!