【问题标题】:Error 3004: Problem in mapping fragment starting at line [closed]错误 3004:从行开始映射片段时出现问题 [关闭]
【发布时间】:2011-08-29 03:41:23
【问题描述】:

我在构建 Web 服务时遇到此错误:

错误 3004:映射问题 从第 323 行开始的片段:否 为属性指定的映射 JE_TRN_HS.JE_HDR_HSJE_HDR_KEY。实体 是类型 [TESTTCPModel.JE_TRN_HS

这就是发生的事情。 我从现有数据库创建了这个实体数据模型。 我添加了 2 个表并重建了 Web 服务。构建成功。

然后我在两个表之间添加了一个关联。 当我尝试重建时,它失败了,上面显示了错误消息!

现在这是踢球者!我删除了新添加的协会并重建。构建失败并显示相同的错误消息!? 我可以摆脱这个错误的唯一方法是如果我删除第二个表,重建并重新添加第二个表??

我到处寻找解决这个问题的方法! 谢谢 史蒂夫

【问题讨论】:

  • 我不知道为什么会发生这种情况,但是我尝试删除列并刷新实体模型无济于事。然后我删除了整个表并更新了模型,问题就消失了。

标签: database entity-framework mapping entity-relationship edmx


【解决方案1】:

您不能简单地将数据库中的表添加到模型中,然后在模型中创建新关联。默认情况下,它使用必须映射到其数据库对应项的独立关联 = 关系也必须存在于数据库中。您必须model your relation as FK association,但它只允许一对一和一对多关联。关联类型之间的区别是described here

【讨论】:

    【解决方案2】:

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

    Defining Constraints in an EF4 model that don’t exist in the database


    万一链接的文章消失了,解决办法是:

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

    【讨论】:

    • 好答案。我遇到了同样的问题,在阅读了这个答案之后,我没有在属性窗口上工作,而是删除了与我的表对应的类,并向模型发出了更新命令。它重新创建了对象类并修复了外键问题。现在它是完美的。感谢回答。
    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        例如,我将一些 Linq2Sql 转换为 EF6 并在 Binary 字段上出现错误。二进制是 System.Data.Linq 类型,但对于 EF,它需要是 byte[]。更改它可以解决问题。

        【讨论】:

          【解决方案6】:

          在 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 文件。

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              【解决方案8】:

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

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

              【讨论】:

                【解决方案9】:

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

                【讨论】:

                  【解决方案10】:

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

                  【讨论】:

                    【解决方案11】:

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

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

                    【讨论】:

                      【解决方案12】:

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

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

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

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

                      在 VS 的 Error List 中显示:Error 11009: Property ' ' is not mapped

                      解决此问题的步骤:

                      1. 在 Visual Studio Code 中编辑了 .edmx 文件;
                      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>
                      

                      【讨论】:

                        【解决方案13】:

                        在我的情况下,首先在解决方案中我刷新了 MyProjectname.edmx 文件但它没有工作。然后我删除了我修改过的表并再次更新了模型表单数据库(不刷新它)。它工作.

                        【讨论】:

                          猜你喜欢
                          • 2011-08-21
                          • 1970-01-01
                          • 2012-01-30
                          • 2020-02-08
                          • 1970-01-01
                          • 2017-10-27
                          • 2011-05-16
                          • 1970-01-01
                          • 1970-01-01
                          相关资源
                          最近更新 更多