概念类型中的成员数量不匹配 - 但它确实

时间:2018-03-02 10:58:20

标签: asp.net-mvc visual-studio entity-framework edmx edmx-designer

我突然在.NET 4 MVC项目中遇到以下错误。

  

概念类型中的成员数量' OrnaviModel.Task'与对象端类型的成员数不匹配' Ornavi.Core.Objects.Task'。确保成员数量相同。

项目使用EDMX文件,该文件用于生成所需的数据对象。该项目上周工作正常,但是现在每当我向任何实体添加新字段时都会收到此错误。删除新属性会立即修复错误。

该字段也已添加到底层数据库表中,因此不应存在不匹配。

为什么我的文件突然停止正常生成?我试过"运行自定义工具",但无济于事。我试过单独的电脑,没有快乐。如果我在XML模式下打开EDMX文件,我可以看到新属性存在,同样如果我浏览到生成的类,属性就在那里。

请帮助..它让我发疯了!

编辑:我还没有得到答案,所以我要发布一些截图,看看是否有帮助:

我已修改了Tasks表,如下所示:

enter image description here

然后我点击"从模型生成数据库"刷新底层对象。如果我展开DataModel.edmx文件,并浏览到相关的类,我可以看到新字段:

enter image description here

我也已将该列添加到数据库中,但每次访问该页面时都是:

  

概念类型中的成员数量' OrnaviModel.Task'与对象端类型的成员数不匹配' Ornavi.Core.Objects.Task'。确保成员数量相同。

为什么会这样?

我尝试过以下方法:   - 在edmx上运行自定义工具   - 在另一台计算机上进行更改   - 尝试了不同的表,列,变量类型

笔记本电脑上没有任何变化 - 相同版本的visual studio,没有安装任何更新。

每一次,同样的问题。如果我删除该列,请单击"从模型生成数据库",然后它可以正常工作。重新加入,同样的问题。

请帮忙!这个项目的数据库结构非常庞大,所以我真的不想重新创建整个项目!

enter image description here

6 个答案:

答案 0 :(得分:1)

可能是您在不同的项目中有两个版本的模型,例如此评论中提到的类似问题:

Number of members in conceptual type does not match with number of members on object side type

答案 1 :(得分:0)

请注意 错误表示代表模型的生成类与模型定义xml不同步。

使用以下方法之一:

  • 尝试重新生成它们(通过在EF中移动一些东西) 设计师或右键单击 edmx 文件并选择“运行自定义” 工具)。
  • 以XML格式打开您的模型。从中删除对该类型的所有引用 CSDL。保存并关闭,然后在GUI中重新打开。现在你应该能够 像往常一样更新模型。如果这不起作用,做同样的事情, 但也要从MSL中删除。

答案 2 :(得分:0)

enter image description here

谢谢@Gert现在我得到了它,因为它是模型优先的方法。

  

所以我认为问题是表数据类型和实体数据类型的映射尝试并将数据类型设置为数据库中的位

尝试从模型生成数据库,如果不能这样做,则将表中的Test列的数据类型设置为BIT

答案 3 :(得分:0)

据我所知,你可以简单解释

  

新列存在于数据库表中,但当前不存在   存在于数据模型类中。您必须更新要包含的模型   你的新专栏。在Models文件夹中,打开ContosoModel.edmx文件   显示模型图。请注意,Student模型没有   包含MiddleName属性。右键单击设计上的任意位置   表面,然后从数据库中选择“更新模型”。

您可以在EF Database First with ASP.NET MVC: Changing the Database找到更多详细信息。

希望有所帮助。

答案 4 :(得分:0)

据我所知,您使用的是模型优先方法。

我想分享一下我在.NET 4 MVC项目中遇到的一个历史问题 - >我的数据库是第一种方法,每当我们在数据库表中添加一个新列时,我们在刷新模型时就遇到了类似的问题。

我的感觉是,你的模型第一种方法也存在同样的错误。

在我们的例子中,我们通过完成删除.edmx模型然后重新生成它来解决它。 (在DB-first中很容易做到。)

但是,在您的情况下,我想建议一些故障排除方法 - >

  1. 尝试在完整的解决方案中搜索其他几个已存在的属性,例如“ CreatedById ”,并查看它存在的位置。
  2. 现在搜索您的新“测试”属性,并在某处丢失时进行匹配。
  3. 如果您发现某处遗漏了它,请尝试在该文件中手动添加它并重新编译您的解决方案。
  4. 如果这样可行,那么正如我已经说过更新模型< - >数据库更改是一个小小的错误。

答案 5 :(得分:0)

我只需在PC上更改日期时间即可。问题是:我最近从backup恢复了Database,然后在Tablet和模块中使用了一些列。在我的新还原表中,缺少Etisiting音乐会模型列。我从备份中恢复了正确的数据库,并且对我有用!