我需要将新的NVARCHAR列添加到我的数据库中的表中。所以我添加了该列,然后启动Visual Studio以更新实体框架的EDMX文件。
我在数据库中运行了所有内容的更新模型,这只会导致“数据读取器不兼容” - 错误。所以我在DB中重命名了整个表,从数据库更新了EDMX,将表重命名为原始名称,再次运行update,然后为所有受影响的存储过程创建了新的函数导入。但我仍然得到同样的错误:
数据阅读器不兼容 指定的'[Model]。[Entity]'。一个 该类型的成员, '[专栏]',没有 数据中的相应列 读者同名。
我看了一下,如果数据库和框架中的列名不同,这似乎是一个常见的错误。然而情况并非如此,它们具有相同的名称。
我可以通过[Entity] .Context。[Column]访问代码中的列,所以我不太清楚数据阅读器在抱怨什么。
我已经没有想法了,所以欢迎任何帮助。
答案 0 :(得分:2)
更新模型会替换存储架构,但不会替换客户端架构或映射。要从“干净的平板”开始,备份当前的EDMX ,然后将其作为XML打开。删除对表的所有引用,然后在图形错误中关闭并打开。建立。如果您有任何错误(可能是已删除表的已损坏链接),请修复它们。然后更新模型以重新添加表。
答案 1 :(得分:1)
刚出现与上述相同的问题。尝试从edmx中删除实体,尝试删除并重新添加函数import,最后在函数import中使用复杂类型重建,但也无法正常工作。
我意识到这种错误可能发生在任何不匹配的情况下,但我们发现问题出在我们用于函数导入的存储过程中。存储过程使用特定的选择列名,列名等,我们添加到表中的新列不在该列表中。为了测试,我们使用*,更新了EDMX,它解决了我们的问题。
答案 2 :(得分:0)
原来EDMX很好,但是由于一些奇怪的原因,设计师在我的项目中停止了更新Designer.cs。
必须进入并手动编辑它。
答案 3 :(得分:0)
对我来说,这是一个我更改实体(垂直实体拆分)的问题,但我的一个存储过程没有为该新字段提取数据。我添加了它(在SP中),现在一切运行正常。
答案 4 :(得分:0)
除非它只是添加一个新项目,否则每次尝试“从数据库更新模型”时都会抛出错误...
解决方案很幸运非常简单 -
1) Open Web.config, find <connectionStrings> node
2) Delete the DBNameEntities <connectionStrings>
- this way you do not have to modify any references to your emdx model
2) Delete the ADO.NET Entity Data Model (.emdx)
3) Re-add the ADO.NET Entity Data Model (.emdx) with the same name.
它更快,更防弹。 (到目前为止!?)
答案 5 :(得分:0)
如果重新添加DataModel,您将丢失所有DataBindings - 尤其是窗体上控件的绑定(如DbGrid)。我已修复此问题,在外部编辑器中手动编辑DataModel.edmx文件。