第一:TPH方法?

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

使用EF4 DB-First模型,使用LINQ-to-Entities和POCO,MVC3应用程序将使用它们。

我有三个实体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 ,它标识了这是什么类型的地址,即邮件或账单。

我想要:

  • 有能力做这样的事情: Customer.CustomerAddress.OfType<MailingAddress>来获取客户的邮寄地址的集合。
  • 拥有一个CurrentMailingAddressCurrentBillingAddress属性,它将在未来以最高的StartDateEndDate返回单个实例CustomerAddress.OfType<>
  • Address通过Zip属性并将这些属性重构为一个复杂类型Address也很好。
  • 我尝试从CustomerAddress创建2个继承实体(假设它是TPH [table-per-hierarchy]策略): MailingAddressBillingAddressCustomerAddressTypeId是鉴别器。 我在模型设计器中这样做了,当我尝试添加第二个继承实体时,它告诉我具有这些名称的属性已经存在,并且不会让我重命名它们以匹配第一个实体的属性。

    任何想法如何做到这一点? 请为我贬低它:)谢谢!


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

    CurrentMailingAddressCurrentBillingAddress都是计算属性,它们不是映射的一部分。 您需要在您的Customer实体的部分实施其逻辑。

    我不明白Zip和复杂类型的最后一点。

    链接地址: http://www.djcxy.com/p/90199.html

    上一篇: first: TPH approach?

    下一篇: ef4 map model defined function to property