我正在使用 Entity Framework Migrations & Code First,最近遇到了一个非常奇怪的问题。 该问题在版本 4.3.1 和 4.4 中重现。
EF 认为上下文已更改,但实际上并没有。 当我更改解决方案的路径时会发生这种情况。例如: 如果我的解决方案位于 C:\integration\something.sln 中,迁移可能会工作,但如果现在我将路径更改为 C:\development\something.sln 并重新构建解决方案,迁移将抛出一个异常,说明有数据库中的未决更改。 (当然没有对源代码做任何改动。
我使用 IL Disassembler 创建了输出程序集的转储,而使用 BeyondCompare,我发现存在差异。我假设数据是相同的,但它的写入顺序不同......
EF 如何确定上下文是否发生变化?程序集校验和是否有可能出现不同并导致 EF 认为发生了变化?
欢迎提出任何想法...
最佳答案
首先,这不是迁移问题 - 它可能是 Entity Framework 算法中的错误,用于检查数据库中是否有更改。
我有一个类层次结构,其中包含一个没有属性的抽象类,使该类不抽象就解决了问题。
在获得一些宝贵的调试经验后,我找到了几种解决这个问题的方法,每一种都比之前的方法引起了更多的关注,这让我非常确信我陷入了一个非常罕见的角落案例。正如我提到的,我决定通过创建一个非抽象类来解决问题。
我试图在一个干净的解决方案中重现该错误,以便我可以将其发送给 Microsoft,但直到现在它还没有真正起作用。
所以...总而言之,如果您发现自己遇到这样的问题(非常令人沮丧),一个好的建议是寻找抽象类!
关于entity-framework - EF 迁移声称上下文发生了变化,但实际上没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12164063/