构建Web服务时出现此错误:
错误3004:映射问题 片段从第323行开始:否 为属性指定的映射 JE_TRN_HS.JE_HDR_HSJE_HDR_KEY。实体 是类型[TESTCPModel.JE_TRN_HS
这就是发生的事情。 我从现有数据库创建了这个实体数据模型。 我添加了2个表并重建了Web服务。构建成功。
然后我在两个表之间添加了一个关联。 当我尝试重建它时失败并显示上面的错误消息!
现在这里是踢球者!我删除了新添加的协会并重建。构建失败并显示相同的错误消息!? 我可以摆脱这个错误的唯一方法是,如果我删除第二个表,重建并重新添加第二个表??
我无处可寻找解决这个问题的方法! 谢谢 史蒂夫
答案 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
我为修复此问题而采取的步骤:
.edmx
文件; custom_table
; .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)