我如何实现版本控制与实体框架

本文关键字:版本控制 实体 框架 实现 何实现 | 更新日期: 2023-09-27 18:18:10

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

该项目是一个桌面应用程序,使用实体框架和包的布局如下:

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

1.0版本有两个对象:

  • 文章

所以我把它打包发给我的客户,他想要做一些改变,我对整个系统做了进一步的改进。

2.0版本现在有三个对象:

  • 文章
  • 用户

使用实体框架时,数据库模式不再匹配V1.0,因此第一个版本现在已经死亡,并抛出错误。我希望我的客户仍然能够使用1.0版本。我应该如何构建我的应用程序以允许继续使用V1?

Edit for english:

我希望我的客户端仍然能够使用V1。假设他有一个测试部门,他们需要能够使用他们的LIVE DB,或者他在跨部门有效地扩展应用程序时遇到困难,因此必须同时运行v1和v2。

我如何实现版本控制与实体框架

一种选择是用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必须返回一个旧客户端已经理解的表示。我认为如果在服务器端没有额外的层,对数据库中的复杂更改进行版本控制几乎是不可能的。一个简单的例子是一个用户与地址的一对一关系,它将被更改为一对多。

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

如果DB模式改变了,我看不出有其他方法可以解决这个问题。