Pregunta

Usando SubSonic 3 ActiveRecord, generé código de una base de datos existente que tenía claves foráneas. Para garantizar que el esquema de la base de datos sea siempre correcto al cambiar de base de datos, coloqué el código de migración al comienzo de la aplicación, usando IDataProvider.MigrateToDatabase<MyClass>() para cada clase generada por ActiveRecord.tt. Resulta que el código de migración no regenera claves foráneas.

¿Cómo debo lidiar con los FK?

  • Olvídese de los FK por completo y maneje las eliminaciones en cascada del código. Pros: a la manera de Rails, la lógica empresarial se mantiene en el código. Contras: necesita manejar transacciones, el código se vuelve mucho más feo; el viaje de ida y vuelta del esquema entre la base de datos y ActiveRecord se vuelve imposible si la base de datos se cambia / borra (¿necesita mantener siempre el esquema original para regenerar / modificar el código AR, de lo contrario se perderán las propiedades de uno a muchos?); Además, mis colegas pueden pensar que estoy enojado.
  • Agregue un paso a las migraciones para crear FK manualmente. Pros: el esquema siempre estará actualizado; El código AR siempre será posible regenerar. Contras: dependencia de la base de datos (¿problema menor?)
  • De alguna manera, encuentre una manera de definir las relaciones FK en el código para que el esquema se pueda migrar correctamente.

¿Lo estoy haciendo mal? Agradecería cualquier consejo.

¿Fue útil?

Solución

Estoy trabajando en cosas de FK ahora mismo para clases y lo creas o no, es bastante difícil. Si su clase principal contiene una lista de una clase secundaria, ¿son muchas / muchas? Tal vez, si su clase de niño contiene una referencia atrás. Esa es una suposición débil (bidireccional no es un buen diseño).

De todos modos.

AR está pensado más para las personas que utilizan DB primero, así que cree su DB como desee y luego ejecute las plantillas AR. Sus FK serán honrados y así sucesivamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top