【发布时间】:2018-08-10 14:05:58
【问题描述】:
我突然开始在 .NET 4 MVC 项目中遇到以下错误。
概念类型“OrnaviModel.Task”中的成员数量与对象端类型“Ornavi.Core.Objects.Task”中的成员数量不匹配。确保成员数量相同。
该项目使用 EDMX 文件,该文件用于生成所需的数据对象。该项目上周运行良好,但是现在每当我向任何实体添加新字段时都会出现此错误。删除新属性会立即修复错误。
该字段也已添加到基础数据库表中,因此不应存在不匹配。
为什么我的文件突然停止正确生成?我试过“运行自定义工具”,但无济于事。我已经在单独的PC上尝试过,没有乐趣。如果我以 XML 模式打开 EDMX 文件,我可以看到新属性就在那里,同样,如果我浏览到生成的类,属性就在那里。
请帮忙..它快把我逼疯了!
编辑:我仍然没有得到答案,所以我将发布一些屏幕截图,看看是否有帮助:
我修改了Tasks表,如下:
然后我单击“从模型生成数据库”以刷新底层对象。如果我展开 DataModel.edmx 文件并浏览到相关类,我可以看到新字段:
我也将该列添加到数据库中,但每次访问该页面时:
概念类型“OrnaviModel.Task”中的成员数量与对象端类型“Ornavi.Core.Objects.Task”中的成员数量不匹配。确保成员数量相同。
为什么会出现这种情况?
我尝试了以下方法: - 在 edmx 上运行自定义工具 - 在另一台计算机上进行更改 - 尝试了不同的表、列、变量类型
笔记本电脑上没有任何变化 - 相同版本的 Visual Studio,没有安装更新。
每次都是同样的问题。如果我删除该列,单击“从模型生成数据库”,它就可以正常工作了。重新添加,同样的问题。
请帮忙!这个项目的数据库结构非常庞大,所以我真的不想重新创建整个项目!
【问题讨论】:
-
您使用的是哪种实体类型(POCO 或 EntityObjects)?您可能想以某种方式查看 EF 当前使用的代码生成策略(尤其是在导航属性和关联多重性中),因为您的问题清楚地表明 EF 生成了另一个具有重复名称的列属性(但前缀改为下划线)。
-
@TetsuyaYamamoto - 我添加了一张显示生成设置的新照片。它不是创建重复项 - 它是使用 getter/setter 创建公共和私有属性
-
"如果我以 XML 模式打开 EDMX 文件,我可以看到新属性在那里" 它应该在 3 个地方 - 在
edmx:StorageModels、edmx:ConceptualModels下和edmx:Mappings。从错误消息看来,其中一个(或多个)丢失了。 -
@IvanStoev - 我检查了 XML,新字段出现在所有 3 个部分中
-
我玩了很多,我发现当我在数据类型为 bool 的实体中添加一个属性并从模型生成数据库时,我向我展示了该实体作为位数据类型。
标签: asp.net-mvc visual-studio entity-framework edmx edmx-designer