将列添加到DB表后,实体框架出现问题

时间:2009-08-04 12:11:03

标签: c# asp.net sql-server entity-framework

我需要将新的NVARCHAR列添加到我的数据库中的表中。所以我添加了该列,然后启动Visual Studio以更新实体框架的EDMX文件。

我在数据库中运行了所有内容的更新模型,这只会导致“数据读取器不兼容” - 错误。所以我在DB中重命名了整个表,从数据库更新了EDMX,将表重命名为原始名称,再次运行update,然后为所有受影响的存储过程创建了新的函数导入。但我仍然得到同样的错误:

  

数据阅读器不兼容   指定的'[Model]。[Entity]'。一个   该类型的成员,   '[专栏]',没有   数据中的相应列   读者同名。

我看了一下,如果数据库和框架中的列名不同,这似乎是一个常见的错误。然而情况并非如此,它们具有相同的名称。

我可以通过[Entity] .Context。[Column]访问代码中的列,所以我不太清楚数据阅读器在抱怨什么。

我已经没有想法了,所以欢迎任何帮助。

6 个答案:

答案 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文件。