我知道这不应该是微不足道的,但到目前为止找不到决议......
使用EF4 DB-First模型,使用带有POCO的LINQ到实体,这些实体将被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
属性,这些属性将在未来返回具有最高CustomerAddress.OfType<>
和StartDate
的单个实例EndDate
。Address
至Zip
属性并将这些属性重构为复杂类型 Address
也很不错。我尝试从CustomerAddress
创建2个继承的实体(假设它是TPH [table-per-hierarchy]策略):
MailingAddress
和BillingAddress
,CustomerAddressTypeId
是歧视者。我在模型设计器中做了这个,并且当我尝试添加第二个继承的实体时,它告诉我具有这些名称的属性已经存在,并且不允许我重命名它们以匹配第一个实体的属性。 / p>
任何想法如何实现这一目标?请为我愚蠢:) 感谢!!!
答案 0 :(得分:1)
这不是那么微不足道。 TPH是可能的,但您必须将所有属性放置到基础CustomerAddress
并派生两个不包含任何属性的子实体,因为所有属性都是共享的(=必须在父级中)。您将使用CustomerAddressTypeId
作为鉴别器,因此您将无法将此字段映射为实体中的属性。我也不确定你是否可以在鉴别器和关联映射中使用该字段(这对我来说实际上是很好的功课)。如果不是,您将无法映射CustomerAddress
和CustomerAddressType
之间的关联。
CurrentMailingAddress
和CurrentBillingAddress
都是计算属性,它们不是映射的一部分。您可以在Customer
实体的部分部分中实现其逻辑。
我不理解Zip
和复杂类型的最后一点。