EF 4.1 Code First - отображение отношений - PullRequest
1 голос
/ 23 ноября 2011

Сначала я начинаю с кода EF 4.1, и мне было интересно, сможет ли кто-нибудь помочь мне понять, как лучше всего сопоставить этот сценарий:

У меня есть адрес класса:

public class Address
{
     public int Id { get; set; }
     public string Line1 { get; set; }
     public string Line2 { get; set; }
     public string City { get; set; }
     public string State { get; set; }
     public string ZipCode { get; set; }
}

И у меня есть два других класса, у которых есть адреса:

    A) Company has Office Address (required) and Mailing Address
    A) Person has Home Address (required), Work Address and "Other Address"

Тот же сценарий также происходит с телефонными номерами.Я действительно ценю любую помощь в этом.Заранее спасибо.

1 Ответ

1 голос
/ 23 ноября 2011

Я бы определенно избежал моделирования типа «Таблица на иерархию» (т. Е. Когда вы встраиваете адрес непосредственно в компанию и сотрудника)

Значение Адреса нормализуются из ваших сущностей и хранятся отдельно (например, TPC)

Затем вы можете либо

  1. Добавить FK "OfficeAddressId" (не обнуляемый) и "MailingAddressId" (обнуляемый) в компанию и 3 x адресных FK лично, однако, в зависимости от ваших требованийдля «запроса адреса», поскольку существуют два разных объекта, ссылающихся на адреса, не очень легко определить, какой адрес принадлежит к какому объекту или к какому типу адресов вы обращаетесь, без необходимости «слепого» объединения в обаКомпания и человек.

ИЛИ, возможно, излишний, но еще более гибкая модель будет

Добавьте таблицу «многие: многие» «EntityAddress», связывающую либо компанию с адресом, либо персону с адресом, а затем добавьте классификационную таблицу «AddressType» (офис, почта, дом, работа и т. Д.).Хотя вам нужно будет ограничить типы адресов, добавляемых к этому множеству: многие с помощью бизнес-логики, это обеспечивает максимальную гибкость для будущего расширения адресов.

Посмотрите эти сообщения здесь и здесь для других идей о том, как решать проблемы.

...