如何编写Code First和Web API版本?

时间:2015-03-21 12:35:11

标签: c# entity-framework asp.net-web-api versioning

我使用实体框架构建了一个Entity Framework Code First数据库:

My version 1 diagram

我也会通过版本化我的网址来解决这个问题:

    config.Routes.MapHttpRoute(
        name: "DefaultApiWithAction",
        routeTemplate: "api/v1/{controller}/{action}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );

然后我实现了'super-duper-not-backwards-compatible'功能,所以我需要更改我的支持上下文并在我的WebAPI中添加一些业务逻辑:My version 2 diagram

我更新网址路由上的版本:

    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的客户端向后兼容的方式处理此方案?

2 个答案:

答案 0 :(得分:1)

此错误与路由无关,但它表示您的模型已更改为ex,您向Address类添加了Person属性。您可以使用migration使数据库与模型保持同步。

答案 1 :(得分:0)

要使v2方案有效,您必须使用如下路由模板:

"api/{v2}/{controller}/{id}"

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