Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 实体框架-实体映射问题_.net_Entity Framework_Mapping_Ssdl_Csdl - Fatal编程技术网

.net 实体框架-实体映射问题

.net 实体框架-实体映射问题,.net,entity-framework,mapping,ssdl,csdl,.net,Entity Framework,Mapping,Ssdl,Csdl,我有两个表:地址和联系人,它们在contactID(联系人)上连接。这两个表在我的实体数据模型(EF4.0)中都有实体,我不想修改它们 我确实想创建一个包含两个实体信息的新实体 到目前为止我所做的: 在CSDL中: <EntityContainer...> <EntitySet Name="AddressTest" EntityType="WebGearsModel.Test" /> <EntitySet Name="ContactTest" Ent

我有两个表:地址和联系人,它们在contactID(联系人)上连接。这两个表在我的实体数据模型(EF4.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?我想我需要一些联系,但我不知道该怎么做。。。记住,我不想修改我现有的地址和联系人实体。

记住实体的定义:

不由其属性定义的对象 属性,而是通过 连续性及其特性

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


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

我也有同样的问题,但我不理解上面的任何一个问题,对于刚接触实体框架的人,是否有lamens的定义?谢天谢地,这是对1.0时代一个更老版本的EF的回答。从那以后,有很多机会,所以我不知道这是否仍然适用,但关键是为了合并地址和联系人,两个实体必须包含相同的密钥。在OP案例中,Address是具有主键addressID的实体。要将联系人直接连接到地址,联系人实体及其基础表还必须具有addressID。EF然后可以通过其公共密钥…addressID正确关联实体的两部分。