如何对 Code First 和 WebAPI 进行版本控制?
How to version Code First and WebAPI?
我使用 entity framework 构建了一个 Entity Framework Code First 数据库:
我也会通过关闭我的 url 的版本来连接它:
config.Routes.MapHttpRoute(
name: "DefaultApiWithAction",
routeTemplate: "api/v1/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
然后我实现了一个 'super-duper-not-backwards-compatible' 函数,因此我需要更改我的支持上下文并将一些业务逻辑放入我的 WebAPI 中:
我在url路由上更新了版本:
config.Routes.MapHttpRoute(
name: "DefaultApiWithAction",
routeTemplate: "api/v2/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
问题:版本 1 不再有效。它将引发错误,指出“The model backing the 'xyzContext' context has changed since the database was created.
”
如何处理这种情况,使无法更新到版本 2 的客户端能够向后兼容?
要使 v2 场景正常工作,您必须使用这样的路由模板:
"api/{v2}/{controller}/{id}"
此错误与路由无关,但表示您的模型已更改 例如,您在 Person
class 中添加了 Address
属性 .您可以使用 migration 使数据库与您的模型保持同步。
我使用 entity framework 构建了一个 Entity Framework Code First 数据库:
我也会通过关闭我的 url 的版本来连接它:
config.Routes.MapHttpRoute(
name: "DefaultApiWithAction",
routeTemplate: "api/v1/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
然后我实现了一个 'super-duper-not-backwards-compatible' 函数,因此我需要更改我的支持上下文并将一些业务逻辑放入我的 WebAPI 中:
我在url路由上更新了版本:
config.Routes.MapHttpRoute(
name: "DefaultApiWithAction",
routeTemplate: "api/v2/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
问题:版本 1 不再有效。它将引发错误,指出“The model backing the 'xyzContext' context has changed since the database was created.
”
如何处理这种情况,使无法更新到版本 2 的客户端能够向后兼容?
要使 v2 场景正常工作,您必须使用这样的路由模板:
"api/{v2}/{controller}/{id}"
此错误与路由无关,但表示您的模型已更改 例如,您在 Person
class 中添加了 Address
属性 .您可以使用 migration 使数据库与您的模型保持同步。