Как вы справляетесь с «отношениями» SubSonic с миграцией?

Согласно этой статье: http://subsonicproject.com/docs/3.0_Migrations

Bottom line: if you're a developer that is concerned about database design,
migrations might not be for you.

Хорошо, это нормально, я могу рассматривать базу данных как просто постоянное хранилище данных, не содержащее никакой бизнес-логики. Другими словами, прославленный текстовый файл.

Я не знаю, как связать два объекта вместе. Возьмем, к примеру, эти два класса:

public class Disaster
{
    public int DisasterId { get; set; }
    public string Name { get; set; }
    public DateTime? Date { get; set; }
    public IList<Address> Addresses { get; set; }
}

public class Address
{
    public int AddressId { get; set; }
    public string WholeAddressHereForSakeOfBrevity { get; set; }
}

Disaster содержит IList из нескольких Addresses, пострадавших от стихийного бедствия. Когда я использую SimpleRepository для добавления их в базу данных с помощью SimpleRepositoryOptions.RunMigrations, он генерирует таблицы со всеми столбцами, но без столбцов внешнего ключа, как ожидалось.

Как мне связать эти две вещи вместе, чтобы при вызове Disaster.Addresses я получал список всех затронутых Addresses? Возможно ли это, или мне нужно вместо этого использовать ActiveRecord и сначала создать таблицы базы данных? Или мне нужно добавить столбец для идентификатора бедствия в Address? Если да, то как этот метод работает для отношений «многие ко многим»?


person Daniel T.    schedule 24.09.2009    source источник


Ответы (1)


Это возможно - просто сделаешь это вручную, вот и все. Добавьте в Disaster свойство «Адреса» и сделайте его IList ‹> (или вы можете сделать его IQueryable, если хотите, чтобы оно было ленивой загрузкой). Когда вы восстанавливаете свой Disaster, просто убедитесь, что вы получили свои адреса.

Это своего рода «руководство» - но в этом суть. Я работаю над улучшением этого, и я надеюсь добавить его в более поздний выпуск.

И прежде чем вы спросите, почему я не сделал этого в первую очередь :), это потому, что я не знаю, следует ли мне использовать Многие ко многим или 1-многие на основе отношений родитель / ребенок. В вашем примере я бы предположил, что это, вероятно, 1 ко многим, но, учитывая то, что я знаю об адресах и бедствиях (особенно во Флориде), вероятно, должно быть много ко многим.

Итог - откуда SubSonic узнал об этом? Мы могли бы интросперировать оба объекта на предмет «двунаправленности», что означает, что если в Address много бедствий, то их много для многих (что очевидно) - но тогда это плохое кодирование, если вам нравится DDD.

Я склоняюсь к этому правилу с некоторым типом переопределения, которое вызовет проблему. Ваши мысли по этому поводу приветствуются :)

person Community    schedule 24.09.2009
comment
Как вы можете видеть в коде, который я предоставил в своем исходном сообщении, я добавил IList (который я теперь преобразовал в IQueryable, потому что мне нужна ленивая загрузка) в класс Disaster. Однако я не совсем понимаю, что вы имеете в виду под «только не забудьте получить свои адреса». Как мне узнать, какие адреса нужно получить, если эта ассоциация не хранится в базе данных? - person Daniel T.; 24.09.2009
comment
Если это не связано в базе данных ... ну, вы как бы потеряли меня там. Если он находится в другой системе, вызывайте его, когда вам это нужно, я полагаю. - person ; 29.09.2009