【问题标题】:Different EDMX model is created on run运行时创建不同的 EDMX 模型
【发布时间】:2020-01-14 14:30:46
【问题描述】:

我有一个第三方项目(比如 DataProject),其中定义了 EF 数据上下文以及 EDMX 文件。我也有自己的项目(比如 MyProject),它引用了 DataProject,所以我可以使用它的数据上下文。

当我在解决方案中直接将 MyProject 引用到 DataProject 时,一切正常。 MyProject/bin/Debug/EDMX 中的 EDMX 文件与 DataProject/EDMX/ 中的完全相同。

但我需要 MyProject 才能将 DataProject 用作​​ NuGet 包。所以我将它添加为 NuGet 引用,当它被添加时,我注意到一个 EDMX 文件夹出现在 MyProject 主文件夹下。此文件夹中的 EDMX 文件与 DataProject/EDMX 中的相同。到目前为止一切顺利。

但是,当我 build 并运行 MyProject 时,它会创建 MyProject/bin/Debug/EDMX,其中的文件版本与上述任何版本都不同,我无法运行 datacontext由于“当前模型不再匹配用于预生成映射视图的模型......”错误。我不确定为什么会发生这种情况 - 是上下文和 EDMX 文件不匹配还是其他原因。我只知道,如果我在解决方案中直接将 MyProject 引用到 DataProject,那么一切正常。

  1. 当我将 DataProject 引用为 NuGet 包时,为什么 MyProject 会创建不同的 EDMX 文件?为什么直接引用 DataProject 时会创建相同的文件?
  2. 有没有办法忽略上面的错误?
  3. 有没有办法强制 EF 上下文使用特定的 EDMX 文件?
  4. 是否有文件/配置我应该在哪里检查任何设置?
  5. 还有其他建议吗?

【问题讨论】:

    标签: .net entity-framework edmx


    【解决方案1】:

    好的,找到原因了。为模式生成的 Edmx 文件已过期,但它们对应于数据库模式。当我直接引用 DataProject 时,EDMX 文件按原样复制到 /bin/Debug/Edmx 中,因为它们被设置为“内容”、“如果较新则复制”。
    当我通过 NuGet 引用 DataProject 时,MyProject/Edmx 中的文件会自动设置为“Emtityeploy”、“DoNotCopy”——因此它们永远不会复制到 /bin/Debug,而是在构建时生成新的 Edmx 文件。这些 Edmx 文件与 EF 模型匹配,但对于与原始 Edmx 文件匹配的数据库来说太新了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-19
      • 2011-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多