0

我有一个使用 EF 提供程序的 Odata 服务。我工作得很好并且很容易创建。但现在它需要改变。这个问题与这个问题类似。但我不清楚答案。

我需要能够同时提供两个(或更多)版本的服务,因为不可能一次更新所有客户端。我想先继续使用 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()

我确实需要支持 write as wel(对于某些服务)

有 2 个 EF db 上下文针对同一个数据库将是一个可接受的解决方案,但我不知道我是否以及如何实现这一点。

提前致谢

4

1 回答 1

0

我找到了解决我的问题的方法,我想分享它。有关我的解决方案的详细描述,请查看此博客文章

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

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

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

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

希望这对任何人都有帮助!

于 2012-10-04T18:32:15.450 回答