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

1 ответ

Решение

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

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

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

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

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

Другие вопросы по тегам