4

我突然开始在 .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,没有安装更新。

每次都是同样的问题。如果我删除该列,单击“从模型生成数据库”,它就可以正常工作了。重新添加,同样的问题。

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

在此处输入图像描述

4

6 回答 6

2

It could be that you have two versions of the model in different projects like the resolution mentioned in this comment from a similar issue:

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

于 2018-03-24T23:47:27.933 回答
0

请注意, 该错误意味着生成的代表您的模型的类与您的模型定义 xml 不同步。

使用以下方法之一:

  • 尝试重新生成它们(通过在 EF 设计器中移动某些东西或右键单击edmx文件并选择运行自定义工具)。
  • 以 XML 格式打开您的模型。从 CSDL 中删除对该类型的所有引用。保存并关闭,然后在 GUI 中重新打开。现在您应该可以像往常一样更新模型了。如果这不起作用,请执行相同的操作,但也要从 MSL 中删除。
于 2018-03-22T08:35:32.223 回答
0

我的理解是您使用的是模型优先方法。

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

我的感觉是,您的模型优先方法中也存在相同的错误。

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

但是,就您而言,我想建议一些故障排除方法->

  1. 尝试在您的完整解决方案中搜索一些其他已经存在的属性,例如“ CreatedById ”,并查看它存在于多少个地方。
  2. 现在搜索您的新“测试”属性并匹配它是否在某处丢失。
  3. 如果您发现它在某处丢失,请尝试在该文件中手动添加它并重新编译您的解决方案。

如果这可行,那么正如我已经说过的那样,更新 Model<-->DB 更改有点麻烦。

于 2018-03-24T06:36:55.393 回答
0

据我了解你的问题,可以简单解释一下

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

您可以在EF Database First with ASP.NET MVC:更改数据库中找到更多详细信息。

希望它有所帮助。

于 2018-03-22T10:13:25.630 回答
0

在此处输入图像描述

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

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

如果无法从模型生成数据库,请尝试将表中 Test 列的数据类型设置为BIT.

于 2018-03-22T09:40:44.760 回答
0

我只是在我的电脑上更改我的日期时间。没关系。问题是:我最近从备份中恢复了数据库,然后在平板电脑中添加了一些列并使用模块。我的新恢复表中遗漏了 Etisiting 协奏曲模型列。我从备份中恢复了正确的数据库,它对我有用!

于 2020-06-28T15:55:53.250 回答