如何使用Entity Framework实现版本控制

时间:2014-08-16 09:06:38

标签: c# entity-framework versioning

我有一个将逐步构建的项目。

该项目是一个桌面应用程序,实体框架包含如下所示的包:

实体框架+ DAL - >应用+逻辑等

1.0版有2个对象:

  • 博客

所以我把它打包并发送给我的客户,他想要一些改变,我在整个系统上取得了进一步的进展。

2.0版现在有3个对象:

  • 博客
  • 用户

使用Entity Framework,数据库模式不再与V1.0匹配,因此第一个版本已经死亡并且引发了错误。我希望我的客户端仍然可以使用1.0版。怎么可能/我应该构建我的应用程序以允许继续使用V1?

编辑EnglishBob:

我希望我的客户仍能使用V1。假设他有一个测试部门,他们需要能够使用他们的LIVE数据库,或者他很难有效地跨部门扩展应用程序,所以必须同时运行v1和v2。

2 个答案:

答案 0 :(得分:2)

一个选项是RESTFUL Webservices包装您的业务逻辑,以便客户端不直接访问数据库,但只有服务返回的版本化数据和OR映射发生在服务器端。 在RESTFUL Webservices中,对象的每个表示都由特殊的uri标识,例如" www.example.com/rest/api/2/posts"其中2表示版本2的Post表示.REST表示可以与数据库中目标对象的存储不同。 在客户端需要一个http客户端,以获取json或xml表示,客户端必须将其转换为POCO。 在带有JAXB的java中,可以对类进行注释,以便序列化和反序列化过程由框架完成。也许.NET也支持这样的注释。 如果引入了新列,则客户端可以忽略它,但如果删除,更改列或更改关系,则必须将版本增加到3,并且版本2的uri必须返回旧客户端已经理解的表示。 我认为在服务器端没有额外的层,数据库中复杂变化的版本化几乎是不可能的。 一个简单的例子是具有一对一地址关系的用户,将被改为一对多。

答案 1 :(得分:0)

最好维护2个DB,一个测试和一个生产。将您的客户端指向生产数据库并在测试数据库上进行开发。一旦您将V2发送到您的客户端,就更新生产数据库并让他知道V1现在已经过时了。

如果数据库架构发生了变化,我还没有看到任何其他方法。