Pourquoi ne hbm2ddl.SchemaExport pas couru ici?
-
12-10-2019 - |
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?
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.