1

语境。我想将运输表分成两个表,第一个表用于有关最常用的运输的一般数据,第二个表用于使用选择器字段 RecordType 将取货地址和目的地地址存储在不同的记录中,以便检索仅在需要时提供地址信息。为此,我创建了三个实体,用于运输一般信息的实体 Move、实体取货地址和实体目的地地址,最后两个实体有一个附加字段“地址类型”来区分哪个是取货,哪个是目的地. 通过模型中的映射详细信息屏幕,我将两个实体、PickupAddress 和 DestinationAddress 映射到同一个表 MoveAddresses,PickupAddress 的代码记录类型 =”P” 和 DestinationAddress 的条件记录类型 = “D”。当我重建数据层解决方案时,出现以下错误

Error   2   Error 3032: Problem in mapping fragments starting at line 625: Condition member 'MoveAddresses.AddressType' with a condition other than 'IsNull=False' is mapped. Either remove the condition on DestinationAddresses.AddressType or remove it from the mapping.

Error   4   Error 3033: Problem in mapping fragments starting at line 647: EntitySets 'PickupAddresses' and 'DestinationAddresses' are both mapped to table 'MoveAddresses'. Their primary keys may collide.
4

1 回答 1

0

您要实现的是每个层次结构的表。根据您的描述,听起来您正在使用实体框架设计器表面。在实体框架设计器中为每个层次结构的表建模是一个多步骤过程。

  1. 创建一个表示将包含多个绑定实体的表的实体(在您的情况下,创建一个Address具有Addresses实体集的实体,匹配整个地址表)。暂时忘掉Move表吧,你现在只关心表共享数据。
  2. 右键单击设计器表面,添加 -> 实体,将每个 Derived 条目的 Base 类型设置为AddressPickupAddressDerived fromAddress
  3. 剪切并粘贴属于每个派生实体的任何特定条目,将它们从基础实体中移除并将它们粘贴到派生实体中。即pickup date从移动AddressPickupAddress
  4. 从基础实体中删除 Decriminator 属性。它实际上不是实体可以直接使用的属性。
  5. 右键单击每个派生实体,选择表映射。选择映射的基表,并设置鉴别器值。
  6. 现在您已准备好根据需要在派生类和其他表之间创建实体关系。
于 2013-08-23T20:35:00.340 回答