Pregunta

Im nuevo a NHibernate, el aspecto de la configuración que siempre ha parecido excesivamente onerosa para mí. Ayer, me encontré con las características de asignación automática de Fluido NHibernate y estaba impresionado.

Para educar a mí mismo, me puse el reto de intentar el 'Primer Proyecto Primeros pasos' ( http: //wiki.fluentnhibernate.org/show/GettingStartedFirstProject ) usando AutoMappings y convenciones. Tengo que admitir que no teniendo mucha suerte.

Para summise mis pasos:

he hecho algunos cambios menores en el esquema de la base en el ejemplo, para eliminar entre los guiones de las claves externas (es decir product_id a ProductId) ya que esto traería más en línea con los estándares de nuestra base de datos de nombres.

Q1) Traté de escribir una aplicación utilizando el IHasManyConvention ForeignKeyConvention como ejemplo, pero el método WithKeyColumn no se parece existir (Supongo que esto se debe a que he descargado de ayer construyen de modo, posteriormente, el diseño ha cambiado desde que se escribió el artículo). ¿Cómo puedo corregir esto?

También hice algunos cambios menores en la capa de entidades en el ejemplo que pensé que esto haría más fácil, tenían que cambiar el nombre de StoresStockedIn a Tiendas (Product.cs) y el personal para empleados (Store.cs).

Mi código es el siguiente:

var cfg = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2005
    .ConnectionString(c => c
        .Is(connectionString)))
.Mappings(m => m.AutoMappings.Add(
                AutoPersistenceModel.MapEntitiesFromAssemblyOf<Store>()
                    .Where(t => t
                        .Namespace == "FluentNHibernateTesting.Entities")
                        .ConventionDiscovery.Setup(c => c.Add<ForeignKeyConvention>())
                ))
.BuildSessionFactory();

A continuación, intente y añadir a las tiendas, los productos y los empleados de la base de datos como por ejemplo la instalación inicial. La excepción consigo sucede en el Confirmar y es:

objeto hace referencia a una instancia transitoria no salva - guardar la instancia transitoria antes de enjuagar. Tipo: FluentNHibernateTesting.Entities.Employee, Entidad: FluentNHibernateTesting.Entities.Employee

Q2) ¿Cómo puedo solucionar este problema? Entiendo (de mi lectura limitada) que tiene algo que ver con la configuración de los elementos de la cascada de las relaciones de objeto correctamente, pero estoy un poco perplejo acerca de cómo hacer esto utilizando efectivamente Asignación automática.

Q3) ¿Hay una fecha de lanzamiento objetivo para el proyecto Fluido? Yo (como supongo que muchos otros) que esto es una excelente iniciativa, pero soy consciente de su uso a menos que sea en un estado estable.

Q4) Su mencionado en muchos de los blogs que están trabajando de manera constante hacia la paridad de las características de Fluido con hbn.xml. ¿Hay una lista de estas características que faltan en algún lugar con el fin de ayudar con la evaluación y el uso de esta herramienta?

Apreciar la ayuda de antemano.

¿Fue útil?

Solución

Le pregunté James Gregory las mismas preguntas en un correo electrónico directamente a él. Proporcionó esta excelente respuesta.

'Hey Paul,

1) KeyColumnNames es lo que está buscando.

2) Usted puede hacer esto uno de los 3 modos. Configuración de un IHasManyConvention globalmente a hacer todas las relaciones en cascada, utilice una llamada ForTypesThatDeriveFrom, o una anulación automapping.

3) Estamos en pruebas privadas de nuestra versión 1.0 ahora. Seguro de si tendremos una beta pública o directamente a liberar, pero que debería ocurrir en las próximas semanas.

4) Es muy poco probable que pueda llegar a ser totalmente completa de funciones con NHibernate, no tenemos ningún deseo de ser. Muchas de las características de NH son muy esotérica, y hay poco beneficio para su ejecución. A partir de 1.0 habrá muy pocas características que no son compatibles con las personas que utilizan regularmente. Puedo decir con seguridad todos los escenarios de asignación comunes son atendidos, y si hay algo que no es siempre se puede caer de nuevo a HBM para ese caso.

Para adelantarse a cualquier comentario que nuestros documentos están fuera de fecha, la documentación que va a ser revisado por 1,0;)

James'

Gracias James.

Otros consejos

  

¿Hay una fecha de lanzamiento para el objetivo   Fluido proyecto? Yo (como supongo que muchos   otros) sienten que esto es una excelente   iniciativa, pero soy consciente de usarlo   a menos que sea en un estado estable.

Usted debe ser capaz de obtener una versión de trabajo de Fluido NHibernate de su repositorio SVN ahora. También han compilado binarios.

En este momento no hay comunicados oficiales de Fluido NHibernate. Esto no es un reflejo de la calidad, sino de nuestro rápido ritmo de cambio. Nuestro código base se actualiza a diario, lo que hace que la extinción de los comunicados oficiales un esfuerzo inútil hasta lograr la paridad de funciones con NHibernate Core. La mayor parte de las características regulares que utiliza día a día están listos.

http://fluentnhibernate.org/downloads

Los problemas actuales son aquí:

http://code.google.com/p/fluent-nhibernate / temas / lista de

Ninguno de ellos parece ser repartir-asesinos. Supongo que depende de la cantidad de tiempo que tiene que experimentar.

  

hace referencia a un objeto transitorio no guardado   instancia - guardar la instancia transitoria   antes de enjuagar. Tipo:   FluentNHibernateTesting.Entities.Employee,   Entidad:   FluentNHibernateTesting.Entities.Employee

Si Google objeto hace referencia a una instancia transitoria no salvo , se encuentran varios partidos de este. Su mejor apuesta es comenzar a ir a través de estos y solución de problemas. Como anécdota, por lo que he leído suena como que significa el mensaje de error exactamente lo que dice, o si hay una relación de muchos a muchos o en cascada que no está siendo actualizado.

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