7

我正在将 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>
4

1 回答 1

5

尝试更新 EDMX 文件的 Mapping 部分中的 AssociationMapping 节点以包含允许空值的条件。

例如

<AssociationSetMapping>
  ...
  <Condition ColumnName="" IsNull="false"/>
</AssociationSetMapping>
于 2008-12-03T12:45:20.663 回答