实体框架拒绝显示“损坏”的列

Posted

技术标签:

【中文标题】实体框架拒绝显示“损坏”的列【英文标题】:Entity Framework Refuses to Show Which Column is "broken" 【发布时间】:2020-11-10 04:57:01 【问题描述】:

这篇文章将充满问题。我知道我们做错了 EF。我知道我们做 EF 的方式是可恶的。现在已经不碍事了:

我们有许多使用 DB First Entity Framework 的非常遗留的代码库。它有效,很糟糕,但它有效。

除非表中的某些内容发生更改并且模型没有更新。由于许多这些旧代码库共享一个数据模型但运行它们自己不同的数据库,因此有时数据模型中的内容会发生变化。例如,就像一列变为 Not Null。

然后,每当您尝试访问该表时,它就会开始中断。最好的解决方案是迁移到 Code First,但这是一个永远不会实现的白日梦。所以我的问题是,到底是如何让 EF 告诉我它阻塞在哪一列?

我发誓我是另一个模糊的错误,“对价值blah 的强制转换失败”或类似的东西,而不是把这台电脑扔到房间里。如果我非常幸运,它会给我一个数据类型,但这绝对是最多的。大多数时候,就像现在一样,我正在挖掘视图或 LINQ 查询中每个表的每一列,以找到没有正确类型或属性的 ONE COLUMN。

EF 必须知道它阻塞在哪一列,我只是不知道如何找到它,而且我终其一生都无法弄清楚为什么 Micro$oft 会想到一个聪明的头脑不在错误中具体化这些信息是个好主意,但我快疯了。

必须有办法。 FWIW 我的 EF 版本在属性面板中显示 3.5,所以我标记了这个 EF 4,因为我找不到 EF 3.5 标记(运行时版本 v2.0.50727)。

【问题讨论】:

也许作为一种稍微不同的策略。您不能使用模式比较工具的任何原因?在某个地方有一个“已知”的数据库副本,您可以将其用作基础以查看发生了什么变化? 【参考方案1】:

错误消息在 EF 6 中得到了改进,应该也允许您获取属性名称

【讨论】:

不幸的是,我认为 EF 6 有我们的遗留代码库无法满足的其他要求,如果满足的话,实际更新的要求太多了。

以上是关于实体框架拒绝显示“损坏”的列的主要内容,如果未能解决你的问题,请参考以下文章

实体框架不包括插入查询中具有默认值的列

实体框架(CTP5、Fluent API)。重命名导航属性的列

实体框架 - 无效的列名称'* _ID“

实体框架数据库首先生成多对多中间表,其中没有额外的列

为什么实体框架引用了一个甚至不存在的列?

数据库表的列中的值的下拉列表-MVC实体框架