Question

Essayer de jouer avec IInterceptor dans NHibernate 2.1.2.4000 J'ai le bit suivant du code de test:

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

Cependant. Je continue à faire passer le message:

  

a échoué: NHibernate.ADOException:   Impossible d'exécuter la requête [SELECT   count (*) comme y0_ DE "Personne" this_]   SELECT COUNT (*) comme y0_ DE: [SQL   "Personne" this_]   ---- System.Data.SQLite.SQLiteException:   erreur SQLite

export de schéma semble fonctionner - pourquoi la table ne pas être créé

Je suppose que cela a quelque chose à voir avec l'aide d'un dans SqlLite mémoire mais pas sûr de ce que la question est. Toutes les idées?

Était-ce utile?

La solution

Vous connaissez là, fait cela, a été blessé aussi, -)

Une fois que la session est libérée, la base de données est essentiellement abandonnée. Lorsque vous utilisez différentes sessions lors de la construction de votre schéma et lors de l'exécution de vos tests, le schéma ne n'existe plus lorsque le test est en cours d'exécution.

Voir cette de href="https://stackoverflow.com/users/185938"> Justin pour une explication très claire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top