2010-03-26 20 views
5

Primero salgamos de esto: sé que SessionFactory es inmutable: estoy intentando cambiar la configuración en tiempo de ejecución y regenerar ISessionFactory.NHibernate: ¿Cómo reconfigurar las asignaciones en el tiempo de ejecución?

Específicamente, tengo un Cliente mapeado que tendrá algunos campos agregados a su nodo de componente dinámico en tiempo de ejecución. Me gustaría hacer algo como esto

var newSessionFactory = previousConfiguration 
    .RemoveClassMapping(typeof(Customer)) 
    .AddXmlString(newMappingForCustomer) 
    .BuildSessionFactory(); 

Sin embargo, yo no veo ninguna manera obvia de eliminar una asignación, ¿hay algo que pueda hacer por debajo de la regeneración de toda la configuración?

+0

En realidad esto no es una cuestión Fluido NHibernate y yo preferiría evitar la adopción de la dependencia por el momento, pero lo tomaré si es necesario. –

Respuesta

1

No es posible. Tendrá que regenerar el Configuration.

Mi sugerencia inicial sería que elija una estrategia diferente para su modelo.

Sin embargo, si usted está decidido a ir con este :-), se puede:

  • Crear un "parcial" Configuration (que no incluye Customer)
  • serializarlo a un MemoryStream
  • Añadir
  • la "base" Customer mapeo, si es necesario
  • Cree el temporal SessionFactory
  • Recuperar toda la información que usted ne ed para mapear Customer
  • Deserialize su salvados Configuration
  • agregar la asignación Customer y crear su última SessionFactory
+0

¿Qué estrategia diferente Diego? Si se agregan campos a los componentes dinámicos y las columnas mapeadas se agregan a las bases de datos en tiempo de ejecución (aunque con poca frecuencia), parecería que la regeneración de SessionFactory sería de lejos la más sencilla. –

+0

La estrategia diferente no es agregar campos a una base de datos en tiempo de ejecución. En su lugar, mantenga una tabla separada con sus definiciones de atributos personalizados y otra con sus valores de atributos personalizados. –

+0

Sí, eso es lo que inicialmente propuse, pero esa estrategia mata tanto el rendimiento como la compatibilidad heredada ¿no? Estoy un poco sorprendido de que NH no haya sido diseñado teniendo en cuenta este escenario. No es tan raro Ciertamente, entiendo que la inmutabilidad de SessionFactory es importante, pero a quién le importa si la clase de configuración se divide en una docena de formas diferentes si va a regenerar la fábrica de todos modos. –

Cuestiones relacionadas