Frage

Der Versuch, mit IInterceptor in NHibernate 2.1.2.4000 zu spielen, um Ich habe das folgende Stück Testcode:

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);
        }
    }
}

Allerdings. Ich erhalte die Meldung:

fehlgeschlagen: NHibernate.ADOException: konnte nicht Abfrage [SELECT ausführen COUNT (*) als y0_ FROM "Person" this_] [SQL: SELECT COUNT (*) als y0_ FROM "Person" this_] ---- System.Data.SQLite.SQLiteException: SQLite Fehler

Schema Export scheint zu funktionieren - warum wird die Tabelle nicht erstellt werden

Ich vermute, hat dies etwas mit der Verwendung von einer im Speicher SQLLite zu tun, aber nicht sicher, was das Problem ist. Irgendwelche Ideen?

War es hilfreich?

Lösung

Been there, done that, wurde auch verletzt; -)

Sobald die Sitzung freigegeben wird, wird die Datenbank im Grunde fallen gelassen. Wenn Sie verschiedene Sitzungen verwenden, wenn Ihr Schema Aufbau und wenn die Tests ausgeführt wird, wird das Schema nicht existiert nicht mehr, wenn der Test ausgeführt wird.

Sehen Sie diese post von Justin für eine sehr klare explaination.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top