2011-01-19 41 views
5

Tratando de jugar con IInterceptor en NHibernate 2.1.2.4000 Tengo el siguiente segmento de código de prueba:¿Por qué hbm2ddl.SchemaExport no se ejecuta aquí?

public class TestingNHibernateInterceptors 
{ 
    [Fact] 
    public void can_intercept_delete_for_audit_log() 
    { 
     FullyConfigureDb(); 
     Session(s => s.Linq<Person>().Any().ShouldBe(false)); 
    } 
    ISessionFactory _sessions; 
    void Session(Action<ISession> @do) 
    { 
     using (var s = _sessions.OpenSession()) 
     { 
      @do(s); 
      s.Flush(); 
     } 
    } 
    void FullyConfigureDb() 
    { 
     var cfg = CreateConfig(); 
     _sessions = cfg.BuildSessionFactory(); 
     BuildSchema(cfg); 
    } 
    Configuration CreateConfig() 
    { 
     return Fluently.Configure() 
      .Database(new SQLiteConfiguration().InMemory()) 
      .Mappings(x => x.FluentMappings.Add<PersonMap>()) 
      .BuildConfiguration() 
      .SetProperty("proxyfactory.factory_class", "NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle") 
      .SetProperty("show_sql", "true"); 
    } 
    void BuildSchema(Configuration config) 
    { 
     var se = new NHibernate.Tool.hbm2ddl.SchemaExport(config); 
     se.Execute(false, true, false, _sessions.OpenSession().Connection, null); 
    } 
    public class Person 
    { 
     public virtual Guid Id { get; private set; } 
     public virtual string Name { get; set; } 
    } 
    public class PersonMap : ClassMap<Person> 
    { 
     public PersonMap() 
     { 
      Id(x => x.Id); 
      Map(x => x.Name); 
     } 
    } 
    public class AuditInterceptor : EmptyInterceptor, IInterceptor 
    { 
     public override void OnDelete(object entity, object id, object[] state, string[] propertyNames, NHibernate.Type.IType[] types) 
     { 
      base.OnDelete(entity, id, state, propertyNames, types); 
     } 
    } 
} 

Sin embargo. Sigo recibiendo el mensaje:

fallidos: NHibernate.ADOException: no podían ejecutar la consulta [SELECT count (*) como y0_ DE "Persona" this_] [SQL: SELECT count (*) como y0_ DE "Persona" this_] ---- System.Data.SQLite.SQLiteException : error SQLite

esquema de exportación parece estar funcionando - ¿por qué no se está creando la tabla?

Supongo que esto tiene algo que ver con el uso de una memoria en sqLite pero no estoy seguro de cuál es el problema. ¿Algunas ideas?

Respuesta

3

estado allí, hecho eso, se lesionó también ;-)

Una vez que se libera la sesión, la base de datos se redujo básicamente. A medida que usa diferentes sesiones al construir su esquema y cuando ejecuta sus pruebas, el esquema ya no existe cuando se está ejecutando la prueba.

Consulte este post de Justin para una explicación muy clara.

Cuestiones relacionadas