添加新实体标量时,实体框架4映射片段错误

时间:2010-06-08 23:26:28

标签: .net entity-framework entity-framework-4

我有一个实体框架4模型优先设计。我在设计师中创建了我的模型的初稿,一切都很顺利。我编译,生成数据库等。

后来我试图将一个字符串标量(Nullable = true)添加到我现有的一个实体中,并且在编译时我一直遇到这种类型的错误:

  

错误3004:映射问题   从第569行开始的碎片:没有   为属性指定的映射   Set MyEntities中的MyEntity.MyValue。一个   具有密钥(PK)的实体不会   往返时:实体是类型   [MyEntities.MyEntity]

每当我添加标量时,我都必须手动打开EDMX文件并更正XML。

关于发生了什么的想法?

8 个答案:

答案 0 :(得分:76)

从那时起我发现在我的实体上添加/更改/删除属性后,我必须“在模型中生成数据库”,否则我会得到3004映射错误。

答案 1 :(得分:42)

我刚刚从模型中删除了有问题的表格,然后将它们添加回来,一切都很顺利。

答案 2 :(得分:29)

对于那些从数据库创建模型的人来说,在我对数据库进行更改后,我遇到了这个问题。当我因为某种原因更改了DB中的字段名称时发生了这种情况(我认为如果更改数据类型也会发生这种情况)。

对我来说,解决方案是右键单击工作区并选择“从数据库更新模型”。这应该将数据库中的属性添加到您的模型中,但是,它不会删除您的旧属性,这些将为您提供3004错误。

右键单击工作区并选择“验证”。这应该会给你一个错误列表,显示有问题的属性。然后,您可以右键单击每个违规属性,然后从模型中手动删除它。

这解决了我的问题。希望它可以帮助别人。

答案 3 :(得分:11)

如果要修改数据库而不重新生成整个模型或从模型重新创建数据库,我发现通过Visual Studio修改EDMX图中的属性最简单,最安全,然后手动调整visual studio不会映射的映射不能访问。

错误会给你一个行号:

  

569

行开始映射片段时出现问题

只需在文本编辑器中打开edmx文件,转到该行,应该很明显需要修复的内容。有一个部分看起来像这样:

<EntityTypeMapping TypeName="YourModel.YourType">
  <MappingFragment StoreEntitySet="YourType">
    <ScalarProperty Name="PropertyName1" ColumnName="DatabaseColumn1" />
    <ScalarProperty Name="PropertyName2" ColumnName="DatabaseColumn2" />
    ...
  </MappingFragment>
</EntityTypeMapping>

只需确保您需要的每个属性/列名称都有一个节点,并且所有属性也会列在edmx文档顶部的<EntityType Name="YourTable">部分中

答案 4 :(得分:1)

如果您的所有查询都是用存储过程编写的,而您只是想填充模型,那么您可以切换到适合我的复杂类型。

如何创建复杂类型:

  1. 手动更改名称 实体生成的课程 有一个名字没有问题 已在您的edmx文件中使用。
  2. 选择“模型浏览器”窗口和 右键单击/添加新的复杂类型。
  3. 复制/粘贴的属性 复杂类型的原始模型。
  4. 将存储过程映射到 复杂的类型。

    我希望这有助于某人。

答案 5 :(得分:1)

在不从图中删除表并重新添加表的情况下,另一种方法是使用表映射选项。

  1. 转到模型浏览器
  2. 右键单击表名。
  3. 选择tablle mapping
  4. Visual Studio将显示一个EF属性匹配/缺少表列的窗口。
  5. 选择/匹配相应列到缺失属性
  6. enter image description here

答案 6 :(得分:0)

在我的某个实体上重命名属性后,我收到了同样的问题。

我发现我的实体属性与表中相应列之间的映射没有设置。

您可以使用编辑器通过右键单击模型中的实体并选择“表格映射”来设置此项。确保将属性映射到数据库中的列。

编辑:我还需要重新运行我的tt文件来生成新类。 (可能自从我在另一个项目中有它?)

答案 7 :(得分:0)

在查看xml文件(edmx)之后,将模型移动到另一个项目并意识到一切正常,我决定关闭并打开Visual Studio并再次编译,然后错误消失。