3

我正在使用实体框架迁移和代码优先,最近遇到了一个非常奇怪的问题。该问题已在 4.3.1 和 4.4 版本中重现。

EF 认为上下文发生了变化,而实际上并没有。当我更改解决方案的路径时会发生这种情况。例如:如果我的解决方案位于 C:\integration\something.sln 迁移可能会工作,但如果现在我将路径更改为 C:\development\something.sln 并重新构建解决方案,迁移将引发异常说数据库中有待处理的更改。(当然源代码没有任何变化。

我使用 IL Disassembler 创建输出程序集的转储,使用 BeyondCompare 我发现存在差异。我假设数据是相同的,但它的写入顺序不同......

EF 如何确定上下文是否发生了变化?汇编校验和是否有可能出现不同并导致 EF 认为发生了变化?

任何想法都是最受欢迎的......

4

1 回答 1

2

首先,这不是迁移问题——它可能是实体框架算法中的一个错误,用于检查数据库中是否有更改。

我有一个类层次结构,其中包含一个没有属性的抽象类,使该类不抽象解决了这个问题。

在获得了一些宝贵的调试经验之后,我找到了几种解决这个问题的方法,每一种方法都比以前更令人惊讶,这让我非常确信我陷入了一个非常罕见的极端情况。正如我所提到的,我决定通过使类不抽象来解决。

我试图在一个干净的解决方案中重现该错误,以便我可以将其发送给 Microsoft,但直到现在它并没有真正起作用。

所以......总结一下,如果你发现自己有这样的问题(非常令人沮丧),一个好的提示是寻找抽象类!

于 2012-09-02T22:16:11.697 回答