2012-05-03 5 views
7

? Necesito trabajar con un DB existente (MySql), donde los nombres de tablas y columnas ya están definidos.¿Cuáles son las reglas de mapeo de PersistEntity/PersistField a los nombres de columnas y tablas en el DB

Si entiendo la documentación correctamente (y no encontré buena documentación sobre este tema, los enlaces serán muy apreciados), los nombres de tabla están relacionados con PersistIdentity, y por lo tanto, deben comenzar con una letra mayúscula (que no es el caso que estoy enfrentando).

Los nombres de columna, sin embargo, son automáticamente un-capitalizado (al menos eso es lo que está implícito en el libro Yesod, capítulo persistente, en el fragmento de código que describe el código generado automáticamente a partir de las declaraciones), por lo que las columnas de la base de datos deben comenzar con una letra minúscula

¿Es correcta la descripción anterior?

¿Puedo controlar específicamente el mapeo de tablas a las identidades y columnas de los campos? Si no, ¿cuáles son las reglas aplicadas automáticamente para el nombramiento? ¿Qué nombres están por lo tanto prohibidos?

Además, uno de los campos es un VARCHAR (30). ¿Cómo puedo comunicar eso a Persistent? En la actualidad se queja (a través devel yesod) que:

errMessage = "BLOB columna/TEXTO 'my_field' utilizado en clave sin una especificación longitud de la clave"}

¿Cuál es el resultado de la migración automática (que probablemente debe deshabilitar de todos modos). Sin embargo, si quiero declarar un campo VARCHAR delimitado, ¿puedo hacerlo a través de Persistent y su herramienta de migración automática?

Gracias,

Respuesta

6

no soy una autoridad en el motor MySQL, pero IIRC (y basado en el código), puede controlar la longitud máxima utilizando el atributo maxlen=.... Del mismo modo, puede tener el control directo del nombre que el campo tendrá en la base de datos mediante el atributo sql=.... Así, por ejemplo, el siguiente podría funcionar:

Person sql=people 
    name Text sql=full_name maxlen=40 
    age Int 

También estoy de acuerdo que se debe desactivar el código automigration si usted está tratando con un esquema preexistente.

+0

Gracias, también vi que la documentación de Persistent (en el libro de Yesod) respondió una parte de mi pregunta (sobre especificar nombres de campo usando sql) así que disculpe la redundancia de esa parte. –

Cuestiones relacionadas