8

当我更新我的 EF 模型(版本 5)时,我遇到了一个奇怪的问题。它删除属于该模型的所有类。

我的情况是这样的。我更改了两个表的键列,这些表引用了我的主表。更新模型并没有对 edmx 进行这些更改,因此我删除了这三个表(主表和两个查找表),保存了 edmx。然后更新模型并重新添加这些表。

一旦我在更新模型后保存了模型,VS 就删除了这个 edmx 的所有类文件。所有表格的 edmx 看起来都还不错,只是类已经消失了。然后我必须恢复我最后的更改并重试。

确实有效的一件事是手动编辑 edmx 文件以对受影响的类进行适当的更改,但我不明白为什么我必须这样做。

有什么想法吗?

谢谢!

4

7 回答 7

9

在删除然后重新添加表以使 EDMX 获取对外键 (FK) 列的更改后,会发生这种情况的一种方式。

发生这种情况是因为与其他表的关系未刷新。

根据此答案https://stackoverflow.com/a/34144341,要手动修复此问题,请按“仅构建”过滤错误列表,然后手动解决 EDMX 编辑器中的任何构建错误。注意关系的多样性。

或者,使用版本控制恢复整个 EDMX 更改并重新开始,使用以下方法:

与其仅删除和重新添加包含已更改 FK 列的表,不如删除并重新添加与已更改的任何 FK 列有任何关系的所有表。

于 2016-04-25T19:11:45.853 回答
2

已经有一段时间了,但最后发现我的 edmx 文件中有一些我没有看到的错误,这导致 poco 类文件无法生成。

于 2018-04-15T14:02:13.800 回答
0

您可以尝试以下方法之一:

1) 在 Visual Studio 的解决方案资源管理器中右键单击“.edmx”文件,然后选择菜单项“运行自定义工具”。

2) 在解决方案资源管理器标题栏下方,您可以看到一个带有工具提示“转换所有模板”的按钮。点击它。它应该在“YourEdmxFileName.tt”文件下更新您的模型。

3) 在 Visual Studio 的“构建”菜单下,选择“转换所有 T4 模板”。

4) 找到各个 T4 模板文件 (*.tt),右键单击它们并选择“运行自定义工具”。

于 2013-08-08T14:31:46.460 回答
0

这样的事情我也经历过。我有一个带有字符串值的表,但我想将其更改为外键,以便可以将重复出现的字符串值存储在单独的表中。所以我创建了一个新表,并将字符串列类型更改为不可为空的 int 并添加了一个外键。当我更新模型时,它会将所有实体类标记为已删除……这不好笑。

我还看到弹出一些错误,表明 EF 没有将列类型从字符串更改为 int。

上面提到的解决方案(自定义工具和转换所有模板)对我不起作用。

对我来说,解决方案是首先在模型中手动将列类型从字符串更改为 int,然后更新模型,不再出现问题。

记录在案:这发生在 Visual Studio 2010 的 EF 4 中。

于 2013-10-10T07:54:19.410 回答
0

为了解决这种情况,我将所有表定义文件从我的模型所在的目录中移出。然后我告诉团队资源管理器恢复删除。它将文件添加回我的目录,我能够继续。

于 2015-03-26T15:23:03.027 回答
0

确保您没有任何命名约定为 _ 的变量。如果有,EF 将失败并重新编写所有类。

更改变量名 p_ 帮助了我。

于 2016-12-16T16:18:30.980 回答
0

我有一个类似的问题。

我使用 VS2013、EF6 并连接到 ORACLE 11G(数据库优先)。

我添加了一个表,该表具有另一个表的外键。由于某种原因,这两个表中的外键类型不同。

更新外键类型解决了我的问题。

于 2017-02-02T09:37:06.257 回答