代码之家  ›  专栏  ›  技术社区  ›  Marcus L

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

  •  3
  • Marcus L  · 技术社区  · 15 年前

    我需要在数据库的表中添加一个新的nvarchar列。所以我添加了这个列,然后启动了Visual Studio来更新实体框架的EDMX文件。

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

    数据读取器与不兼容 指定的'[模型].[实体]'。一 类型的成员, “[列]”,没有 数据中的对应列 具有相同名称的读卡器。

    我环顾了一下,如果数据库和框架中的列名不同,这似乎是一个常见的错误。但情况并非如此,他们有相同的名字。

    我可以通过[Entity].Context.[Column]访问代码中的列,因此我不太明白数据读取器在抱怨什么。

    我没有主意了,欢迎你帮忙。

    6 回复  |  直到 7 年前
        1
  •  2
  •   Craig Stuntz    15 年前

    更新模型将替换存储模式,而不是客户机模式或映射。从“干净的石板”开始, 备份当前的EDMX ,然后将其作为XML打开。删除对表的所有引用,然后在图形错误中关闭和打开。建造。如果有任何错误(可能是到已删除表的断开链接),请修复它们。然后更新模型以重新添加表。

        2
  •  1
  •   Brian    13 年前

    和上面的问题一样。尝试从EDMX中删除实体,尝试删除并重新添加函数导入,最后在函数导入中使用复杂类型重新生成,但这也不起作用。

    我意识到这个错误实际上可以发生在任何不匹配的场景中,但是我们发现问题发生在我们用于函数导入的存储过程中。存储过程使用了特定的select columnname、columnname等,我们添加到表中的新列不在该列表中。为了测试,我们使用了*,更新了EDMX,它解决了我们的问题。

        3
  •  0
  •   Marcus L    15 年前

    结果发现edmx很好,但是由于一些奇怪的原因,设计师停止了在我的项目中更新designer.cs。

    必须进入并手动编辑它。

        4
  •  0
  •   abend    14 年前

    对于我来说,这是一个问题,我更改了一个实体(垂直实体拆分),但我的一个存储过程没有为新字段提取数据。我添加了它(在SP中),现在一切都运行正常。

        5
  •  0
  •   Dan B Steve Cooper    8 年前

    除非只是添加一个新项目,否则每次我试图“从数据库更新模型”时,都会引发一个错误…

    幸运的是,解决方案非常简单-

    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.
    

    它更快,防弹。(到目前为止!?)

        6
  •  0
  •   Finesse74    7 年前

    如果重新添加数据模型,则将丢失所有数据绑定,尤其是表单上控件的绑定(如dbgrid)。我已经修复了这个问题,在外部编辑器中手动编辑datamodel.edmx文件。