【问题标题】:Versioning an API with the Entity Framework使用实体框架对 API 进行版本控制
【发布时间】:2014-02-11 18:09:32
【问题描述】:

我正在使用我们公司已使用多年的数据库架构,但无法更改它的基本结构。需要一个 API 来访问这些数据,所以我们决定使用 WCF 数据服务和实体框架。为了让数据模型比我们的表结构更有意义,我们将 EF 模型附加到 SQL 视图而不是表。这对我们的目的非常有效。

现在我正在考虑创建 API 的第二个(更新)版本,同时需要现有 API 继续为旧应用程序工作,并让两个 API 并行运行,通过不同的 URL 端点访问。

我已经为新版本创建了一个新的 WCF 数据服务端点,根据需要创建了新的 SQL 视图(其名称附加了“_v2”),以及一个将模型映射到新视图的新数据库上下文.这也很有效。

问题是我还想拥有单独版本的 EF 模型类,因为我想在它们中实现细微的差异。但是我遇到了命名冲突,EF 框架给出了错误“CLR 类型到 EDM 类型的映射不明确。”

拥有第二组同名 EF 模型的唯一方法是从单独的程序集中加载模型。这是我唯一的选择吗?我应该考虑其他一些方法吗?

我也考虑过为两个版本使用相同的 EF 模型类,并在配置模型时使用 Ignore 方法,但这也感觉不太理想。

对替代方法的任何建议表示赞赏!

【问题讨论】:

    标签: .net wcf entity-framework


    【解决方案1】:

    将新模型放在不同的命名空间中。

    Namespace ModelsV2
    {
        public class CarsV2
        {
           ...
        }
    }
    

    【讨论】:

    • 当我收到错误时,它们位于不同的命名空间中。我的意思是,他们必须是。我不能在同一个命名空间中拥有两个同名的类,对吧?
    • 实际上,我现在看到您在类名后面附加了“V2”。这是一种选择......但我想避免一个丑陋的选择。
    • @Moskie 你打算如何指定你想要的对象的哪个版本,而不让每个版本都在不同的程序集/命名空间中或使用不同的类名?另外,当您以后需要另一个版本时会发生什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多