Как вы относитесь к 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.
Я склоняюсь к этому правилу с некоторым типом переопределения, которое могло бы вызвать проблему. Ваши мысли по этому поводу приветствуются:)