实体框架错误 - 错误11009:未映射属性''

时间:2012-10-08 11:02:47

标签: c# entity-framework visual-studio-2008 mapping

为了改进旧项目,我被迫使用VS 2008和Framework 3.5 - 我遇到的问题是edmx显示奇怪的行为而不是根据需要更新实体。

edmx引发了我上面的错误,但当我转到相应的表并右键单击它 - “从数据库更新模型”没有变化时,错误仍然存​​在。

如果我通过选择它并按del删除图表中的表格,那么在模型浏览器中它会从.Database中消失但是当点击“从数据库更新模型”时我无法在“添加”列表中看到我我所能做的只是“刷新”表格,因为我仍然在刷新列表中看到它(这不应该发生,因为我删除了它!)

12 个答案:

答案 0 :(得分:46)

检查模型的xml文件,它可能还在某处。尝试从该XML文件中手动删除它,然后再次尝试更新。请务必进行备份。

答案 1 :(得分:39)

当我将列名从CampaignKey更改为CampaignCode时,我遇到了此问题。进行数据库更改后,我转到.edmx设计器,右键单击并选择从数据库更新模型。然后,当我编译时,我得到了错误:

  

错误11009:未映射属性CampaignKey

在设计器中仔细查看我的表格后,我发现Visual Studio已经在数据库中创建了新的字段CampaignCode。但它也留下了旧字段CampaignKey,导致错误,因为它不再存在于数据库中。

要解决此问题,请右键点击设计器中我的表格中的CampaignKey字段,然后选择删除

之后我保存了.edmx,编译后错误消失了。

答案 2 :(得分:3)

在表或视图上的列名更改大小写之前,我遇到了同样的错误。例如,如果视图有一个名为“OrderID”的列,然后列名称更改为“OrderId”,那么它将给出错误“Property”OrderID“未映射”。这可以通过将案例更改回模型中的存在方式来解决。

答案 3 :(得分:2)

有时,升级项目会引发错误。

请确保您已备份所有数据,只是在案例中。

当我们将实体模型添加到项目中时,它会将相应的连接字符串添加到 web.config 。现在,当您从项目中删除模型时,即使这样,连接字符串仍然驻留在web.config中。

因此,请执行以下步骤:

  1. 删除模型
  2. 从web.config
  3. 中删除相应的连接字符串
  4. 现在,执行从头开始重新添加模型的步骤。
  5. 希望它能够奏效。

答案 4 :(得分:2)

我在记事本中打开了edmx文件并删除了错误的字段。然后我在设计器中再次更新了模型

答案 5 :(得分:2)

我知道这个问题是关于VS 2008和'恢复'模型的,但是对于任何发现这个问题的人,就像我在VS 2015中遇到相同的错误11009时那样,我首先尝试了“从数据库更新模型”到无有效,然后我通过右键单击.edmx设计中的模型表并选择表映射来修复它。我没有删除模型。我的模型与db表相关联。

答案 6 :(得分:1)

当我更改数据库中的列名并从模型更新数据库时,我遇到了同样的错误。我无法在解决方案的任何位置找到原始名称。我简单地解决了它

  1. 从模型中删除表格(右键单击表格,点击删除),
  2. 从数据库更新模型(右键单击edmx背景,选择"从数据库更新模型",添加更改的表)。

答案 7 :(得分:0)

我在数据库优先模型上遇到与Visual Studio 2017和Entity Framework 6相同的问题,在刷新它以获取新列时。

我尝试了以上所有方法,但唯一有效的方法是删除EDMX并生成一个新的EDMX。

答案 8 :(得分:0)

我有这个错误(错误3007:从行开始映射片段时出现问题...),在向.edmx添加表后

首先,我删除最后添加的表格,然后重新更新该表格中的模型,但选中“包含外键”复选框:

enter image description here

答案 9 :(得分:0)

在我的情况下,我向Visual Studio中Designer中现有的表添加了一个名为sys_user_id的新标量属性。我没有从数据库中更新模型,因为这在设计器中引起了很多错误。我只想映射添加到数据库侧给定表中的单个列。

问题是这样做之后,我开始收到以下异常:

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

在Visual Studio中,Error List窗口中显示的是:Error 11009: Property ' ' is not mapped

我为解决此问题所做的工作如下:

  1. 在Visual Studio代码中打开.edmx文件;
  2. 搜索了令人反感的table_name;
  3. 在适当的地方添加了丢失的映射。

它在2个地方缺少映射:

<EntityType Name="table_name">
    <Key>
        <PropertyRef Name="user_id" />
    </Key>
    <Property Name="user_id" Type="int" Nullable="false" />
    <Property Name="tenant_id" Type="int" />
    ... ALL OTHER COLUMNS HERE ...
    <Property Name="sys_user_id" Type="int" Nullable="true" /> <= WAS MISSING THIS AND SO I HAD TO ADD IT BY HAND
</EntityType>

<EntitySetMapping Name="table_name">
  <EntityTypeMapping TypeName="ShardDB.table_name">
    <MappingFragment StoreEntitySet="table_name">
      <ScalarProperty Name="user_id" ColumnName="user_id" />
      <ScalarProperty Name="tenant_id" ColumnName="tenant_id" />
      ... ALL OTHER COLUMNS HERE ...
      <ScalarProperty Name="sys_user_id" ColumnName="sys_user_id" /> <= WAS MISSING THIS AND SO I HAD TO ADD IT BY HAND
    </MappingFragment>
  </EntityTypeMapping>
</EntitySetMapping>

在Visual Studio Code中对其进行更改并返回Visual Studio之后,它要求我重新加载.edmx文件,因为该文件已被修改。重新加载,然后按F5键运行代码。它开始按预期工作。

答案 10 :(得分:0)

找到的最简单的方法是在edmx中找到具有未映射属性的模型/表。选择它并删除它。保存您的edmx,然后再次更新,从数据库中重新添加模型。仅删除未映射的属性对我不起作用。

答案 11 :(得分:0)

实体框架错误-Error 11009: Property is not mapped

此错误的原因是数据库与 .edmx 文件之间没有正确的同步。

解决方案1 ​​

.edmx 文件中删除模型,然后再次添加。

解决方案2

右键单击 .edmx 文件。

在以下两个位置添加更新/新属性;

下:

<EntityType Name="TableName"> <Property Name="SaleFinYear" Type="varchar" MaxLength="50" />

在`下:

<MappingFragment StoreEntitySet="TableName"> <ScalarProperty Name="SaleFinYear" ColumnName="SaleFinYear" />

有关屏幕截图的更多详细信息,请检查-here