47

I have this error when I build my Web Service:

Error 3004: Problem in mapping fragment starting at line 323: No mapping specified for properties JE_TRN_HS.JE_HDR_HSJE_HDR_KEY. Entity is type [TESTCPModel.JE_TRN_HS

This is what happend. I created this Entity Data Model from an existing database. I added 2 tables and rebuilt the Web Service. The build was successfull.

THEN I added an Association between the two tables. When I tried to rebuild it failed with the error message displayed above!

Now here's the kicker! I deleted the newly added Association and rebuilt. The build failed with the same error message!? The only way I can get rid of this error is if I delete the second table, rebuild and re-add the second table??

I've looked EVERYWHERE for the solution to this problem! Thanks Steve

4

13 回答 13

40

在我的情况下,不允许修改现有表,但我发现当您添加一个在 EF4 中选中“在模型中包含外键列”的新表并且该表不包含任何外键关系时,您尝试添加一个关联它会触发这个错误。

在 EF4 模型中定义数据库中不存在的约束


如果链接的文章消失了,解决办法是:

您需要打开关联的属性窗口,然后单击参照约束省略号以进入参照约束对话框。然后为“从属属性”设置选择正确的字段。

于 2011-09-20T18:16:13.563 回答
35

就我而言,另一位开发人员已从数据库的表中删除了该字段。意识到这一点后,从实体模型中删除表并将其添加回来解决了问题。

于 2014-04-15T13:00:59.327 回答
5

我现在遇到了这个问题...需要添加一个标量属性,假设custom_property使用 Visual Studio 中的设计器添加到现有表。

我本可以从数据库中更新模型,但这不是一个选择。它在模型中造成了很多错误。这是一个巨大的数据库模型,我需要添加此属性的表可能有 30 多个关系。我只是想映射这个custom_property添加到名为custom_table.

直接在设计器中添加标量属性后,抛出以下异常:

  • InnerException {"\r\nModels.MyDB.msl(352,10) : 错误 3004:从第 352 行开始映射片段时出现问题:没有为 Set custom_table 中的属性 custom_table.custom_property 指定映射。\r\n带有键的实体 (PK ) 在以下情况下不会往返:\r\n 实体类型为 [MyDB.custom_table]\r\n"} System.Exception {System.Data.Entity.Core.MappingException}

Error ListVS 中显示:Error 11009: Property ' ' is not mapped

我为解决此问题而采取的步骤:

  1. .edmx在 Visual Studio Code 中编辑文件;
  2. 寻找custom_table;
  3. .edmx用映射补充了XML 代码。

这些是我必须添加映射的地方:

<EntityType Name="custom_table">
    <Key>
        <PropertyRef Name="some_id" />
    </Key>
    <Property Name="some_id" Type="int" Nullable="false" />
    <Property Name="other_id" Type="int" />
    ...
    <Property Name="custom_property" Type="int" Nullable="true" /> <= THIS WAS ADDED BY ME
</EntityType>

<EntitySetMapping Name="custom_table">
  <EntityTypeMapping TypeName="MyDB.custom_table">
    <MappingFragment StoreEntitySet="custom_table">
      <ScalarProperty Name="some_id" ColumnName="some_id" />
      <ScalarProperty Name="other_id" ColumnName="other_id" />
      ...
      <ScalarProperty Name="custom_property" ColumnName="custom_property" /> <= THIS WAS ADDED BY ME
    </MappingFragment>
  </EntityTypeMapping>
</EntitySetMapping>
于 2019-09-23T17:15:51.457 回答
2

您不能简单地将数据库中的表添加到模型中,然后在模型中创建新关联。默认情况下,它使用必须映射到其数据库对应项的独立关联 = 关系也必须存在于数据库中。您必须将您的关系建模为 FK 关联,但它只允许一对一和一对多关联。此处描述了关联类型之间的差异。

于 2011-05-19T20:41:16.847 回答
0

当我在更改连接字符串后最终“从数据库更新模型”时遇到了这个问题。

通过右键单击实体并打开和关闭一个键它似乎已经导致刷新并修复了问题。这似乎更像是实体框架的一个错误。

应该注意的是,在这种情况下,我使用的是 MySQL 连接器,所以我怀疑它通常相当挑剔。

于 2013-05-28T18:35:35.740 回答
0

如果您在实体上应用了映射,请尝试从表中删除该列,这将解决问题

于 2018-11-21T16:59:26.083 回答
0

在我的例子中,我重命名了表中的一个字段并添加了一个主键。在那之后,我得到了那个错误。我去了我的对象/模型列表,删除它并从数据库刷新后,我又遇到了同样的错误。我试了几次,但没有。EF 生成的类是旧表结构和新表结构的混合体。

经过一段时间的调查,这是解决方案:转到您的实体的图表。找到您的表格或在右侧打开模型资源管理器(右键单击图表 - 打开模型资源管理器)。在 ...Model、...Model.Store 下搜索您的模型/表格并将其删除。之后,再次从数据库中添加表并解决问题。

于 2019-05-15T16:41:05.953 回答
0

如果模型上有不可映射的属性,则会出现此错误。

例如,我正在将一些Linq2Sql转换为EF6并在某个Binary字段上出错。Binary 是一种System.Data.Linq类型,但对于 EF,它必须是byte[]. 改变它解决了这个问题。

于 2016-09-25T03:18:16.853 回答
0

EF 6 遇到了类似的问题:

exception.InnerException
{"\r\nEntities.EAM.msl(458,10) : error 3004: Problem in mapping fragments starting at line 458:No mapping specified for properties InspectionPdfReportRequest.SyncDate in Set InspectionPdfReportRequests.\r\nAn Entity with Key (PK) will not round-trip when:\r\n  Entity is type [Model.Entities.InspectionPdfReportRequest]\r\n\r\nEntities.EAM.msl(488,10) : error 3004: Problem in mapping fragments starting at line 488:No mapping specified for properties InspectionReportRequest.SyncDate in Set InspectionReportRequests.\r\nAn Entity with Key (PK) will not round-trip when:\r\n  Entity is type [Model.Entities.InspectionReportRequest]\r\n"}
    Data: {System.Collections.ListDictionaryInternal}
    HResult: -2146232032
    HelpLink: null
    InnerException: null

问题原来是我直接在文本编辑器中对我的数据库优先 EF 应用程序的 *.edmx 文件进行了更改,而不是使用设计器。因此,只需还原文本更改并使用设计器应用它们,错误就消失了。在设计器中点击保存会更新关联的 *.msl 文件。

于 2017-01-12T21:26:18.433 回答
0

从数据库更新模型选项对我不起作用。

所以我需要先删除所有实体,然后再从数据库更新模型以成功修复解决方案。

于 2018-09-13T19:35:45.727 回答
0

就我而言,在解决方案中,首先我刷新了 MyProjectname.edmx 文件,但它不起作用。然后我删除了我修改过的表并再次更新了模型表单数据库(不刷新它)。它可以工作。

于 2020-01-02T19:27:24.960 回答
0

就我而言,我的数据库管理员已将列名大写更改为小写我通过再次为该表更新(从数据库更新模型)解决了这个问题。然后,删除以前的大写列

于 2019-04-26T05:00:09.013 回答
0

我从 Linqpad 收到此错误,无法弄清楚为什么它突然开始发生,以及这是否会成为我使用上下文的应用程序中的问题。我也刚刚删除了最近由一个新实体创建的类,然后我右键单击 .tt 文件并点击“运行到光标”以重新生成该类。那为我修好了。

于 2017-03-11T10:55:09.810 回答