如何对 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}"

ASP.NET Web API: Using Namespaces to Version Web APIs

此错误与路由无关,但表示您的模型已更改 例如,您在 Person class 中添加了 Address 属性 .您可以使用 migration 使数据库与您的模型保持同步。