第一:TPH方法?
我知道这不应该是微不足道的,但到目前为止找不到解决方案...
使用EF4 DB-First模型,使用LINQ-to-Entities和POCO,MVC3应用程序将使用它们。
我有三个实体Customer
, CustomerAdress
和一个查找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>
来获取客户的邮寄地址的集合。 CurrentMailingAddress
和CurrentBillingAddress
属性,它将在未来以最高的StartDate
和EndDate
返回单个实例CustomerAddress.OfType<>
。 Address
通过Zip
属性并将这些属性重构为一个复杂类型Address
也很好。 我尝试从CustomerAddress
创建2个继承实体(假设它是TPH [table-per-hierarchy]策略): MailingAddress
和BillingAddress
, CustomerAddressTypeId
是鉴别器。 我在模型设计器中这样做了,当我尝试添加第二个继承实体时,它告诉我具有这些名称的属性已经存在,并且不会让我重命名它们以匹配第一个实体的属性。
任何想法如何做到这一点? 请为我贬低它:)谢谢!
这并不是那么微不足道。 TPH将成为可能,但您必须将所有属性放在基本CustomerAddress
并派生出两个不包含任何属性的子实体,因为所有属性都是共享的(=必须在父级中)。 您将使用CustomerAddressTypeId
作为鉴别器,因此您将无法将该字段映射为实体中的属性。 我也不确定你是否可以在辨别器和关联映射中都有这个领域(对我来说这实际上是很好的作业)。 如果没有,您将无法映射CustomerAddress
和CustomerAddressType
之间的关联。
CurrentMailingAddress
和CurrentBillingAddress
都是计算属性,它们不是映射的一部分。 您需要在您的Customer
实体的部分实施其逻辑。
我不明白Zip
和复杂类型的最后一点。
上一篇: first: TPH approach?