错误3004:从行开始映射片段时出现问题

时间:2011-05-19 19:10:46

标签: entity-framework-4 mapping entity-relationship

构建Web服务时出现此错误:

  

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

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

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

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

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

13 个答案:

答案 0 :(得分:34)

在我的情况下我不允许修改现有的表,但是我发现当你在EF4中选中“在模型中包含外键列”的新表时,表格中不包含任何外键关系,那么你试试添加关联会触发此错误。

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


如果链接文章消失,解决方案是:

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

答案 1 :(得分:22)

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

我现在遇到了这个问题...需要使用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)的实体在以下情况下不会往返   实体的类型为[MyDB.custom_table] \ r \ n“} System.Exception   {System.Data.Entity.Core.MappingException}
  •   

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

我为修复此问题而采取的步骤:

  1. 在Visual Studio代码中编辑了.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>

答案 4 :(得分:0)

当我在更改连接字符串后结束'从数据库更新模型'时,我遇到了这个问题。

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

在这种情况下应该注意我使用的是MySQL连接器,所以我怀疑它一般都很挑剔。

答案 5 :(得分:0)

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

例如,我将部分Linq2Sql转换为EF6,并在Binary字段上出错。二进制是System.Data.Linq类型,但对于EF,它必须是byte[]。改变它解决了问题。

答案 6 :(得分: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文件。

答案 7 :(得分:0)

我从Linqpad那里得到了这个错误,并且无法弄清楚为什么它会突然发生,以及这是否会在我的应用程序中使用上下文时出现问题。我刚刚删除了最近由新实体创建的类,然后我右键单击.tt文件并点击&#34;运行到光标&#34;重新生成课程。这为我解决了。

答案 8 :(得分:0)

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

因此,我需要先删除所有实体,然后才能从数据库更新模型以成功解决该问题。

答案 9 :(得分:0)

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

答案 10 :(得分:0)

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

答案 11 :(得分:0)

就我而言,我已重命名了表中的字段并添加了主键。在那之后,我得到了那个错误。我进入了对象/模型列表,将其删除并从数据库中刷新后,我再次遇到相同的错误。我尝试了几次,但没有任何反应。 EF生成的类是旧表结构和新表结构之间的混合体。

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

答案 12 :(得分:0)

以我为例,在解决方案中,我首先刷新了MyProjectname.edmx文件,但是它不起作用。然后我删除了已对其进行修改的表,然后再次更新了模型表单数据库(不刷新它)。