【问题标题】:How to version Code First and WebAPI?如何对 Code First 和 WebAPI 进行版本控制?
【发布时间】:2015-03-21 12:35:10
【问题描述】:

我使用实体框架构建了一个实体框架代码优先数据库:

我也会通过对我的网址进行版本控制来解决这个问题:

    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 的客户端向后兼容的方式处理这种情况?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      要使 v2 场景正常工作,您必须使用这样的路由模板:

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

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

      【讨论】:

      • 谢谢你,这是一个有趣的阅读。我认为这种方法取消了“支持 'xyzContext' 上下文的模型自创建数据库以来已更改。”错误?
      • Database.SetInitializer(null); //尝试将此添加到您的 Globel.asax 文件中
      猜你喜欢
      • 2017-03-22
      • 2011-10-13
      • 1970-01-01
      • 2015-03-08
      • 2013-06-11
      • 2023-03-29
      • 2014-10-29
      • 1970-01-01
      • 2016-06-15
      相关资源
      最近更新 更多