我正在将 Linq 用于应用每个类型方法的表的实体。到目前为止,这一直进展顺利。我有以下设置:
- 父表
- 子表(从父表继承)
- 大子表(继承自子表)
- 链接表(外键可为空,到子表)
这是数据库图
在上述视频之后,我将 Table Per Type 方法应用于 Linq to 实体在将上述表添加到模型时创建的默认模式。
在按类型应用表之前:
在每种类型的表之后:
然后我编译了项目并得到了你可以在上图中看到的错误。为了解决这个问题,我去了外键链接的映射,我添加了 childid 字段,错误消息正在抱怨。
然后我重新编译并得到另一个错误:
从第 147、176 行开始的片段映射问题:具有不同键的两个实体映射到同一行。确保这两个映射片段不会将具有重叠键的两组实体映射到同一组行。
这就是我现在的重点。问题似乎是“LinkingTable”上的“ChildID”为空。如果我将其设置为不可为空,我不会收到上述错误。
我已将上述步骤中使用的数据库和项目保存到天空驱动器。
有谁知道如何解决这个错误?
戴夫
这是固定代码(感谢 The Gecko)
前
<AssociationSetMapping Name="FK_LinkingTable_Child"
TypeName="TablePerTypeModel.FK_LinkingTable_Child"
StoreEntitySet="LinkingTable">
<EndProperty Name="Child">
<ScalarProperty Name="Id" ColumnName="ChildID" />
</EndProperty>
<EndProperty Name="LinkingTable">
<ScalarProperty Name="LinkTableID" ColumnName="LinkTableID" />
</EndProperty>
</AssociationSetMapping>
后
<AssociationSetMapping Name="FK_LinkingTable_Child"
TypeName="TablePerTypeModel.FK_LinkingTable_Child"
StoreEntitySet="LinkingTable">
<EndProperty Name="Child">
<ScalarProperty Name="Id" ColumnName="ChildID" />
</EndProperty>
<EndProperty Name="LinkingTable">
<ScalarProperty Name="LinkTableID" ColumnName="LinkTableID" />
</EndProperty>
<Condition ColumnName="ChildID" IsNull="false"/>
</AssociationSetMapping>