Вопрос

Используя SubSonic 3 ActiveRecord, я сгенерировал код из существующей базы данных, которая имела внешние ключи.Чтобы гарантировать, что схема базы данных всегда корректна при переключении баз данных, я разместил код переноса в начале приложения, используя IDataProvider.MigrateToDatabase<MyClass ( Мой класс )>() для каждого класса, созданного ActiveRecord.tt .Оказывается, код миграции не восстанавливает внешние ключи.

Как мне следует обращаться с FKS:

  • Полностью забудьте о FKS и обрабатывайте каскадные удаления в коде.Плюсы:Как и в Rails, бизнес-логика сохраняется в коде.Минусы:нужно обрабатывать транзакции, код становится намного уродливее;переключение схемы между базой данных и ActiveRecord становится невозможным, если база данных переключена / очищена (необходимо всегда сохранять исходную схему для регенерации / изменения AR-кода, иначе сгенерированные свойства "один ко многим" будут потеряны?);кроме того, мои коллеги могут подумать, что я сумасшедший.
  • Добавьте шаг к миграции, чтобы создать FKS вручную.Плюсы:схема всегда будет актуальной;AR-код всегда можно будет восстановить.Минусы:зависимость от базы данных (незначительная проблема?)
  • Каким-то образом найдите способ определить отношения FK в коде, чтобы схему можно было правильно перенести.

Я делаю это неправильно?Я был бы признателен за любой совет.

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

Решение

Прямо сейчас я работаю над материалом FK для занятий, и хотите верьте, хотите нет - это довольно сложно.Если ваш родительский класс содержит список дочернего класса - это много / many?Может быть - если ваш дочерний класс содержит обратную ссылку.Это слабое предположение (двунаправленный дизайн не является хорошим).

В любом случае.

AR предназначен больше для пользователей, ориентированных на базу данных, поэтому создайте свою базу данных так, как вам нравится, а затем запустите AR templates.Ваши FKS будут почитаемы и так далее.

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