【问题标题】:Entity Framework - Entity Mapping problem实体框架 - 实体映射问题
【发布时间】:2011-03-09 09:55:10
【问题描述】:

我有两个表:地址和联系人,它们在contactID(在联系人中)上连接。这两个表在我的实体数据模型 (EF 4.0) 中都有实体,我不想修改它们。

我确实想创建一个包含来自两个实体的信息的新实体。

到目前为止我做了什么:

在 CSDL 中:

<EntityContainer...>
    <EntitySet Name="AddressTest" EntityType="WebGearsModel.Test" />
    <EntitySet Name="ContactTest" EntityType="WebGearsModel.Test" />
</EntityContainer>

<EntityType Name="Test">
  <Key>
    <PropertyRef Name="addressID" />
  </Key>
  <Property Type="Int32" Name="addressID" Nullable="false" annotation:StoreGeneratedPattern="Identity"  />
  <Property Type="Int32" Name="contactID" Nullable="false"  />
  <Property Type="String" Name="firstName" Nullable="false" MaxLength="30" FixedLength="false" Unicode="false" />
  <Property Type="String" Name="emailAddress" Nullable="false" MaxLength="150" FixedLength="false" Unicode="false" />
</EntityType>

在我的 C-S 映射中:

<EntitySetMapping Name="AddressTest">
  <EntityTypeMapping TypeName="WebGearsModel.Test">
    <MappingFragment StoreEntitySet="Address">
      <ScalarProperty Name="addressID" ColumnName="addressID" />
      <ScalarProperty Name="contactID" ColumnName="contactID" />
      <ScalarProperty Name="firstName" ColumnName="firstName" />
    </MappingFragment>
  </EntityTypeMapping>
</EntitySetMapping>

<EntitySetMapping Name="ContactTest">
  <EntityTypeMapping TypeName="WebGearsModel.Test">
    <MappingFragment StoreEntitySet="Contact">
      <ScalarProperty Name="contactID" ColumnName="contactID" />
      <ScalarProperty Name="emailAddress" ColumnName="emailAddress" />
    </MappingFragment>
  </EntityTypeMapping>
</EntitySetMapping>

我收到的错误是:

映射片段开始的问题 在第 150 行:必须指定映射 所有关键属性 (ContactTest.addressID) 的 EntitySet ContactTest。

当联系人实体中不存在 AddressID 时,我应该如何映射该实体中的 AddressID?我想我需要某种关联,但我不确定如何去做……请记住,我不想修改现有的 Address 和 Contact 实体。

【问题讨论】:

    标签: .net entity-framework mapping ssdl csdl


    【解决方案1】:

    记住实体的定义:

    一个未被其定义的对象 属性,而是通过一个线程 连续性及其同一性。

    每个“实体”都必须具有唯一标识它的东西;关键。但是,您似乎正试图从一个物理类型定义两种类型的实体,该物理类型只有一个为地址提供一致身份的键,但不为联系人提供一致的身份。这违反了实体的规则,使 ContactTest 概念无效。

    由于基础物理类型Test 定义了一个关键属性addressID,所有从该类型派生的EntitySet 必须映射该属性以符合定义实体的规则。否则不可能保持状态的一致性。

    【讨论】:

    • 我也有同样的问题,但我不明白以上任何内容,对于实体框架的新手来说,是否有一个蹩脚的定义?谢谢
    • 嗯,这是对 EF 的一个更旧版本的答案......早在 1.0 天。从那以后有很多机会,所以我不知道这是否仍然适用,但关键是为了结合地址和联系人,两个实体必须包含相同的密钥。在 OP 案例中,Address 是具有主键 addressID 的实体。要将 Contact 直接连接到 Address,Contact 实体及其基础表还必须具有 addressID。然后,EF 可以通过它们的公共密钥...addressID 正确关联实体的两半。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多