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

C# 向DB表添加列后实体框架出现问题,c#,asp.net,sql-server,entity-framework,C#,Asp.net,Sql Server,Entity Framework,我需要在数据库中的表中添加一个新的NVARCHAR列。所以我添加了这个专栏,然后启动VisualStudio来更新实体框架的EDMX文件 我从数据库对所有内容运行更新模型,这只会导致“数据读取器不兼容”错误。所以我重命名了数据库中的整个表,从数据库中更新了EDMX,将表重命名回原始名称,再次运行更新,然后为所有受影响的存储过程创建了新的函数导入。但我还是得到了同样的错误: 数据读取器与不兼容 指定的“[Model].[Entity]”。A. 类型的成员, “[Column]”没有 数据中对应的列

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

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

数据读取器与不兼容 指定的“[Model].[Entity]”。A. 类型的成员, “[Column]”没有 数据中对应的列 具有相同名称的读取器

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

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


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

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

结果显示EDMX很好,但由于某种奇怪的原因,设计器在我的项目中停止了更新designer.cs


必须进入并手动编辑它。

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

只是出现了与上面相同的问题。尝试从edmx中删除实体,尝试删除并重新添加函数导入,最后在函数导入中使用复杂类型重新生成,但也不起作用


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

除非它只是添加了一个新项目,否则几乎每次我尝试“从数据库更新模型”时都会抛出一个错误

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

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.
1)打开Web.config,查找节点
2) 删除DBNameEntities
-这样,您就不必修改对emdx模型的任何引用
2) 删除ADO.NET实体数据模型(.emdx)
3) 重新添加具有相同名称的ADO.NET实体数据模型(.emdx)。

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

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

是否将此表用作存储过程的临时表?否,它实际上是整个数据库中使用最频繁的表。当您运行存储过程时,还是直接针对该表运行linq语句时,会出现此错误?所有返回实体的存储过程都会出现此错误。我还没有尝试过通过linq直接访问任何数据,但我猜这不会是一个问题,因为intellisense会对其进行处理。我从in Web.Config中删除了DBNameEntities,然后删除了.emdx和readd。。。到目前为止,这已经奏效了(不幸的是,在我修改DB时,我似乎不得不做大约1/2的工作……Jikes,该文件是一个雷区!另外,该表在所有其他表中几乎都是FK:ed,那么这是否意味着我也必须删除所有这些表?我真的必须说,手动编辑EDMX文件以向表中添加一个简单列完全是荒谬的。我不是要批评你,Craig。这是实体框架中的一个严重缺陷。我同意3.5 SP1中的EF设计器(与EF运行时不同)有很多缺陷。但你通常不必这样做“向表中添加一个简单的列”。更像,“当您向模型中添加一个表,然后将其删除,并希望让设计器重新开始时。"有比3.5 SP1更新的版本吗?+1:有这么多的存储过程通过逐个命名来选择列,这是我的问题。这教会了我,每当你想将sp绑定到一个实体时,你必须使用
select*
。不……这太糟糕了……我删除了它,删除了DBEntities连接字符串并读取数据。它更快、更简单证据…(到目前为止?!)