添加新的实体标量时,entity framework4映射片段错误

我有一个entity framework4模型优先的devise。 我在devise师中创build了我的模型的初稿,一切都很好。 我编译,生成数据库等

后来我试图给我现有的一个实体添加一个string标量(Nullable = true),当我编译时,我总是收到这种types的错误:

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

我一直不得不手动打开EDMX文件,并纠正XML添加标量。

想法是怎么回事?

自从发现我添加/更改/删除我的实体属性后,我必须“从模型生成数据库”编译之前,否则我得到3004映射错误。

我只是从模型中删除了违规的表格,然后将它们添加回来,一切都很好。

对于那些从数据库创build模型的人,在对数据库进行更改之后,我遇到了这个问题。 发生这种情况时,我改变了数据库中的字段名称由于某种原因(我想这也发生如果你改变数据types)。

对我来说,解决scheme是右键单击工作区并select“从数据库更新模型”。 这应该添加从数据库到你的模型的属性,但是,它不会删除您的旧属性,那些会给你3004错误。

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

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

如果要修改数据库而不重新生成整个模型或从模型中重新创build数据库,我发现通过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">部分

如果你所有的查询都是用存储过程编写的,而你只是想填充模型,那么你可以切换到一个复杂的types,这对我来说很有用。

如何创build一个复杂的types:

  1. 手动将您遇到问题的实体生成类的名称更改为您的edmx文件中尚未使用的名称。
  2. select“模型浏览器”窗口,然后右键单击/添加新的复杂types。
  3. 将原始模型的属性复制/粘贴到复杂types。
  4. 将存储过程映射到复杂types。

    我希望这可以帮助别人。

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

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

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

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

在检查了xml文件(edmx)之后,将模型移动到另一个项目并意识到一切正常,我决定closures并打开Visual Studio并complile againt,然后错误消失。

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

  1. 转到模型浏览器
  2. 右键点击表名。
  3. selecttablle映射
  4. Visual Studio将显示一个EF属性匹配/缺less表列的窗口。
  5. select/匹配适当的列丢失属性

在这里输入图像说明