EF4 DB-first: подход TPH? - PullRequest
       93

EF4 DB-first: подход TPH?

2 голосов
/ 21 апреля 2011

Я знаю, что это не должно быть тривиально, но пока не могу найти разрешение ...

Работа с моделью 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, который определяет тип этого адреса, то есть Mailing или Биллинг .

Я бы хотел:

  • Имею возможность сделать что-то вроде этого: Customer.CustomerAddress.OfType<MailingAddress>, чтобы получить коллекцию почтовых адресов для клиента.
  • Иметь свойства CurrentMailingAddress и CurrentBillingAddress, которые в будущем вернут один экземпляр CustomerAddress.OfType<> с самыми высокими StartDate и EndDate.
  • Было бы также неплохочтобы взять Address через Zip свойства и преобразовать эти свойства в сложный тип Address.

Я попытался создать 2 унаследованных объекта из CustomerAddress (предполагаяэто стратегия TPH (таблица на иерархию): MailingAddress и BillingAddress, CustomerAddressTypeId - дискриминатор.Я сделал это в конструкторе моделей, и как только я попытался добавить вторую унаследованную сущность, он сказал мне, что свойства с этими именами уже существуют, и не позволил мне переименовать их в соответствии со свойствами первой сущности.

Есть идеи, как этого добиться?Пожалуйста, сделайте это для меня глупо :) Спасибо !!!

1 Ответ

1 голос
/ 22 апреля 2011

Это не так тривиально.TPH будет возможен, но вы должны поместить все свойства в базу CustomerAddress и получить две дочерние сущности, которые не будут содержать никаких свойств, поскольку все свойства являются общими (= должно быть в родительском объекте).Вы будете использовать CustomerAddressTypeId в качестве дискриминатора, и из-за этого вы не сможете отобразить это поле как свойство объекта.Я также не уверен, можете ли вы иметь поле как в дискриминаторе, так и в сопоставлении ассоциаций (это действительно хорошая домашняя работа для меня).Если нет, вы не сможете отобразить связь между CustomerAddress и CustomerAddressType.

Оба CurrentMailingAddress и CurrentBillingAddress являются вычисляемыми свойствами и не являются частью отображения.Это зависит от вас, чтобы реализовать их логику в вашей частичной части Customer сущности.

Я не понимаю последнюю точку с Zip и сложным типом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...