为什么visualstudio在我更新实体框架模型时会删除我的类

本文关键字:删除 我的 模型 框架 visualstudio 更新 实体 为什么 | 更新日期: 2023-09-27 18:26:49

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

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

一旦我在更新模型后保存了它,VS就删除了这个edmx的所有类文件。edmx在所有的桌子上看起来仍然不错,只是课程已经结束了。然后我必须恢复上次更改并重试。

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

有什么想法吗?

谢谢!

为什么visualstudio在我更新实体框架模型时会删除我的类

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

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

根据这个答案,https://stackoverflow.com/a/34144341,若要手动修复此问题,请按"仅生成"筛选错误列表,然后在EDMX编辑器中手动解决任何生成错误。注意关系的多样性。

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

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

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

同样的事情也发生在我身上。我有一个带有字符串值的表,但我想将其更改为外键,这样我就可以将重复出现的字符串值存储在一个单独的表中。因此,我创建了一个新表,并将字符串列类型更改为不可为null的int,并添加了一个外键。当我更新模型时,它将所有实体类标记为已删除。。。一点也不好笑。

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

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

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

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

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

您可以尝试以下操作之一:

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

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

3) 在Visual Studio的"生成"菜单下,选择"转换所有T4模板"。

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

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

更改变量名p_对我有帮助。

我也遇到了类似的问题。

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

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

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