Pregunta

Tratando de jugar con IInterceptor en NHibernate 2.1.2.4000 Tengo el siguiente segmento de código de prueba:

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:

falló: NHibernate.ADOException: No se pudo 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 un SQLLite en la memoria, pero no está seguro de cuál es el problema. Algunas ideas?

¿Fue útil?

Solución

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

Una vez que se libera la sesión, la base de datos es básicamente dejó caer. Si utiliza diferentes sesiones de la construcción de su esquema y cuando se ejecuta sus pruebas, el esquema no no existe más cuando la prueba se está ejecutando.

Ver este después de Justin para una explicación muy clara.

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