Bien, ayer logré obtener las últimas compilaciones troncales de NHibernate y FluentNHibernate para trabajar con mi último pequeño proyecto. (Estoy trabajando en una aplicación de seguimiento de errores.) Creé una buena capa de acceso a datos usando el patrón Repositorio.¿Cómo ajustar el mapeador automático de FluentNHibernate?
Decidí que mis entidades no son nada especiales, y también que con la madurez actual de los ORM, no quiero crear la base de datos a mano. Por lo tanto, elegí utilizar la función de asignación automática de FluentNHibernate con la propiedad "hbm2ddl.auto" de NHibernate configurada como "crear".
Realmente funciona como un encanto. Puse la configuración de NHibernate en el archivo de configuración del dominio de mi aplicación, lo configuré y comencé a jugar con él. (Por el momento, creé algunas pruebas unitarias solamente). Creó todas las tablas en la base de datos y todo lo que necesito para ello. Incluso mapeó mis relaciones de muchos a muchos correctamente.
Sin embargo, hay algunos fallos pequeños:
- Todas las columnas creadas en la base de datos permiten nula. Entiendo que no puede predecir qué propiedades deberían permitir nulo y cuáles no, pero al menos me gustaría decir que debería permitir null solo para aquellos tipos para los que null tiene sentido en .NET (por ejemplo, no los tipos de valor anulables no deberían permitir nulo).
- Todas las columnas nvarchar y varbinary que creó tienen una longitud predeterminada de 255. Preferiría tenerlas en max en lugar de eso.
¿Hay alguna manera de decirle al auto mapeador acerca de las dos simples reglas anteriores?
Si la respuesta es no, ¿funcionará correctamente si modifico las tablas que creó? (Por lo tanto, si fijo algunas columnas no permitir nula, y cambiar la longitud permitida por alguna otra, será correctamente trabajar con ellos?)
edición final: Muchas gracias a todos los que se redujo en y ayudó a salir. Todos mis problemas con Fluent se resuelven ahora.
¡Muchas gracias! Me las arreglé para que funcione con el siguiente código: persistenceModel.Conventions.Add (ConventionBuilder.Property.Always (x => x.Length (16000))); Esto es un poco hacky, porque en SQL Server, el 16000 lo establecerá en MAX, pero puede no ser bueno para otros servidores de bases de datos. ¿Hay una manera genérica de hacerlo? – Venemo
No realmente. En general, debe establecerlo en el tipo personalizado "StringClob", porque eso debería significar que NHibernate es un tipo de "texto", pero aun así algunos proveedores de bases de datos NHibernate (como PostgreSQL) lo ignorarán. Es por eso que, por ejemplo, en mi ejemplo de Override he utilizado tanto el CustomType como la declaración CustomSqlType, para configurarlo en "texto". Alternativamente, si cambia el esquema de la base de datos debajo, a NHibernate no le importará si es varchar o algo más grande (texto, blob, etc.). Pero esta tampoco es una buena solución debido a muchas cosas obvias. – SztupY
De acuerdo, lo dejaré como está por el momento. Por cierto, es agradable ver a otro húngaro aquí. :) – Venemo