Используя SubSonic 3 ActiveRecord, я сгенерировал код из существующей базы данных с внешними ключами. Чтобы обеспечить правильность схемы базы данных при переключении баз данных, я разместил код миграции в начале приложения, используя IDataProvider.MigrateToDatabase<MyClass>()
для каждого класса, сгенерированного ActiveRecord.tt. Оказывается, код миграции не восстанавливает внешние ключи.
Как мне бороться с ФК:
- Полностью забудьте о FK и обрабатывайте каскадные удаления в коде. Плюсы: в стиле Rails бизнес-логика хранится в коде. Минусы: необходимо обрабатывать транзакции, код становится намного уродливее; обход схемы между базой данных и ActiveRecord становится невозможным, если база данных переключена / очищена (необходимо всегда сохранять исходную схему для восстановления / изменения кода AR, иначе сгенерированные свойства типа «один ко многим» будут потеряны?); кроме того, мои коллеги могут подумать, что я сумасшедший.
- Добавьте в миграции шаг для создания FK вручную. Плюсы: схема всегда актуальна; Код AR всегда можно будет восстановить. Минусы: зависимость от базы данных (небольшая проблема?)
- Как-нибудь найти способ определить отношения FK в коде, чтобы схему можно было правильно перенести.
Я что делаю неправильно? Буду признателен за любой совет.