質問

Nhibernate 2.1.2.4000でIinterceptorを使用しようとしています。次のテストコードを持っています。

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

でも。私はメッセージを受け取り続けます:

失敗:nhibernate.adoexception:query [select count(*)として "person" this_] [sql] [sql:select count(*)as y0_ from "person" this_] ----- System.data.sqlite。 SQLiteException:SQLiteエラー

スキーマエクスポートが機能しているようです - なぜテーブルが作成されていないのですか?

これは、メモリsqlliteを使用することと関係があると推測していますが、問題が何であるかはわかりません。何か案は?

役に立ちましたか?

解決

そこに行って、それをして、怪我をしました;-)

セッションがリリースされると、データベースは基本的に削除されます。スキーマを構築するときやテストを実行するときに異なるセッションを使用するため、テストが実行されているときにスキーマは存在しなくなりません。

これを参照してください 役職 から ジャスティン 非常に明確な説明のために。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top