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

Jas*_*rse 70 .net entity-framework entity-framework-4

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

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

错误3004:从第569行开始映射片段时出现问题:没有为Set MyEntities中的属性MyEntity.MyValue指定映射.具有密钥(PK)的实体在以下情况下不会往返:实体是类型[MyEntities.MyEntity]

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

关于发生了什么的想法?

Jas*_*rse 76

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

  • 这是荒唐的!我正在从数据库创建我的模型,而不是相反.我开始发现EF相当多的马车...... :( (37认同)
  • 我注意到,当我删除属性时,模型的更新版本仍包含旧字段.我必须手动删除字段.添加这些信息,以防它帮助任何人. (5认同)
  • 是的,为什么我要打扰EF,从来没有遇到linq2sql的这些问题 (2认同)

小智 42

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

  • 也为我工作.数据库第一. (5认同)

Jef*_*son 29

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

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

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

这为我解决了这个问题.希望它可以帮助别人.


Phi*_*hil 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>
Run Code Online (Sandbox Code Playgroud)

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