Как вы справляетесь с дозвуковыми "отношениями" с миграцией?

StackOverflow https://stackoverflow.com/questions/1469238

Вопрос

Согласно этой статье: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?Если да, то как этот метод работает для отношений "многие ко многим"?

Это было полезно?

Решение

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top