为了改进旧项目,我被迫使用VS 2008和Framework 3.5 - 我遇到的问题是edmx显示奇怪的行为而不是根据需要更新实体。
edmx引发了我上面的错误,但当我转到相应的表并右键单击它 - “从数据库更新模型”没有变化时,错误仍然存在。
如果我通过选择它并按del删除图表中的表格,那么在模型浏览器中它会从.Database中消失但是当点击“从数据库更新模型”时我无法在“添加”列表中看到我我所能做的只是“刷新”表格,因为我仍然在刷新列表中看到它(这不应该发生,因为我删除了它!)
答案 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中。
因此,请执行以下步骤:
希望它能够奏效。
答案 4 :(得分:2)
我在记事本中打开了edmx文件并删除了错误的字段。然后我在设计器中再次更新了模型
答案 5 :(得分:2)
我知道这个问题是关于VS 2008和'恢复'模型的,但是对于任何发现这个问题的人,就像我在VS 2015中遇到相同的错误11009时那样,我首先尝试了“从数据库更新模型”到无有效,然后我通过右键单击.edmx设计中的模型表并选择表映射来修复它。我没有删除模型。我的模型与db表相关联。
答案 6 :(得分:1)
当我更改数据库中的列名并从模型更新数据库时,我遇到了同样的错误。我无法在解决方案的任何位置找到原始名称。我简单地解决了它
答案 7 :(得分:0)
我在数据库优先模型上遇到与Visual Studio 2017和Entity Framework 6相同的问题,在刷新它以获取新列时。
我尝试了以上所有方法,但唯一有效的方法是删除EDMX并生成一个新的EDMX。
答案 8 :(得分:0)
答案 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
我为解决此问题所做的工作如下:
.edmx
文件; table_name
; 它在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