两个实体映射到相同的行

时间:2016-12-09 07:48:02

标签: entity-framework entity-framework-6 ef-database-first

我在实体框架中的数据库第一个模型上遇到以下错误:

  

错误3032:从第3434行开始映射片段时出现问题,   4312:EntityTypes Model.Docent,Model.Student被映射到   表格参加者中的相同行。映射条件可用于   区分这些类型映射到的行。

虽然我已经为这些模型添加了条件:

<EntityTypeMapping TypeName="IsTypeOf(Model.Student)">
  <MappingFragment StoreEntitySet="Attendee">
    <ScalarProperty Name="Id" ColumnName="atnId" />
    <Condition ColumnName="atnTypeId" Value="1" />
  </MappingFragment>
</EntityTypeMapping>

<EntityTypeMapping  TypeName="IsTypeOf(Model.Docent)">
  <MappingFragment StoreEntitySet="Attendee">
    <ScalarProperty Name="AvailabilityApprovedByType" ColumnName="atnAvailabilityApprovedByAttId" />
    <ScalarProperty Name="Id" ColumnName="atnId" />
    <Condition ColumnName="atnTypeId" Value="2" />
  </MappingFragment>
</EntityTypeMapping>

他们是一个更复杂的层次结构,可能就是这个问题。但我不确定如何继续。这是一个层次结构:

Attendee                (Abstract)
  -> Facility           (Type = 3)
  -> AttendeeCollection (Abstract)
      -> Team           (Type = 4)
      -> Group          (Type = 5)
  -> Person             (Abstract)
      -> Student        (Type = 1)
      -> Docent         (Type = 2)

1 个答案:

答案 0 :(得分:0)

好吧,我发现了问题。 Person实体已映射标量属性和关联。协会所在的问题。因为它们可能有两种类型。我无法为他们写条件,因为他们可以映射到两个属性。所以我完全删除了Person类的标量属性和表映射。

之后,我在Docent en Student类上实现了这些标量属性的私有版本。并通过部分实现暴露它们。我将它们作为抽象添加到Person类。

我希望这是明确的,并帮助其他人。可能其他人可以把它写得更清晰。