Дозвуковая миграция ActiveRecord 3 игнорирует внешние ключи
-
05-07-2019 - |
Вопрос
Используя SubSonic 3 ActiveRecord, я сгенерировал код из существующей базы данных, которая имела внешние ключи.Чтобы гарантировать, что схема базы данных всегда корректна при переключении баз данных, я разместил код переноса в начале приложения, используя IDataProvider.MigrateToDatabase<MyClass ( Мой класс )>()
для каждого класса, созданного ActiveRecord.tt .Оказывается, код миграции не восстанавливает внешние ключи.
Как мне следует обращаться с FKS:
- Полностью забудьте о FKS и обрабатывайте каскадные удаления в коде.Плюсы:Как и в Rails, бизнес-логика сохраняется в коде.Минусы:нужно обрабатывать транзакции, код становится намного уродливее;переключение схемы между базой данных и ActiveRecord становится невозможным, если база данных переключена / очищена (необходимо всегда сохранять исходную схему для регенерации / изменения AR-кода, иначе сгенерированные свойства "один ко многим" будут потеряны?);кроме того, мои коллеги могут подумать, что я сумасшедший.
- Добавьте шаг к миграции, чтобы создать FKS вручную.Плюсы:схема всегда будет актуальной;AR-код всегда можно будет восстановить.Минусы:зависимость от базы данных (незначительная проблема?)
- Каким-то образом найдите способ определить отношения FK в коде, чтобы схему можно было правильно перенести.
Я делаю это неправильно?Я был бы признателен за любой совет.
Решение
Прямо сейчас я работаю над материалом FK для занятий, и хотите верьте, хотите нет - это довольно сложно.Если ваш родительский класс содержит список дочернего класса - это много / many?Может быть - если ваш дочерний класс содержит обратную ссылку.Это слабое предположение (двунаправленный дизайн не является хорошим).
В любом случае.
AR предназначен больше для пользователей, ориентированных на базу данных, поэтому создайте свою базу данных так, как вам нравится, а затем запустите AR templates.Ваши FKS будут почитаемы и так далее.