2

我知道这不应该是微不足道的,但到目前为止找不到解决方案......

使用 EF4 DB-First 模型,将 LINQ-to-Entities 与将由 MVC3 应用程序使用的 POCO 一起使用。

我有三个实体CustomerCustomerAdress一个查找CustomerAddressType

Customer             CustomerAddress                  CustomerAddressType
----------           ----------------                 -------------------
CustomerId (PK)      CustomerAddressId (PK)           CustomerAddressTypeId (PK)
LastName             CustomerId (FK)                  Description (Values: Mailing, Billing)
FirstName            CustomerAddressTypeId (FK) 
MiddleInitial        Address
....                 City
                     State
                     Zip
                     StartDate
                     EndDate

如您所见,CustomerAddress有一个FK CustomerAddressTypeId,它标识这是什么类型的地址,即MailingBilling

我想:

  • 有能力做这样的事情:Customer.CustomerAddress.OfType<MailingAddress>为客户收集邮寄地址。
  • 有一个CurrentMailingAddressCurrentBillingAddress属性,它将返回CustomerAddress.OfType<>具有最高StartDateEndDate未来的单个实例。
  • 也可以Address通过Zip属性并将这些属性重构为Complex Type Address

我尝试创建 2 个继承的实体CustomerAddress(假设它是 TPH [table-per-hierarchy] 策略): MailingAddress并且BillingAddressCustomerAddressTypeId作为鉴别器。我在模型设计器中这样做了,当我尝试添加第二个继承实体时,它告诉我具有这些名称的属性已经存在,并且不允许我重命名它们以匹配第一个实体的属性。

任何想法如何做到这一点?请帮我把它搞砸:) 谢谢!!!

4

1 回答 1

1

这不是那么微不足道。TPH 将是可能的,但您必须将所有属性放在基础上CustomerAddress并派生两个不包含任何属性的子实体,因为所有属性都是共享的(= 必须在父级中)。您将CustomerAddressTypeId用作鉴别器,因此您将无法将此字段映射为实体中的属性。我也不确定你是否可以在鉴别器和关联映射中都有这个字段(这对我来说实际上是很好的作业)。如果不是,您将无法映射 和 之间的CustomerAddress关联CustomerAddressType

两者CurrentMailingAddressCurrentBillingAddress都是计算属性,它们不是映射的一部分。您可以在Customer实体的部分部分实现它们的逻辑。

我不理解Zip复杂类型的最后一点。

于 2011-04-22T07:15:10.323 回答