0

私は次の構成を持っています:

_container = new WindsorContainer ();
var factory = new SessionFactoryManager().CreateSessionFactory();
_container.Register(Component.For<NHibernate.ISessionFactory>().Instance(factory));

そして、私が持っている他の場所:

var authRepo = new NHibernateUserAuthRepository (_container.Resolve<NHibernate.ISessionFactory>());
_container.Register (Component.For<IAuthRepository>().Instance(authRepo));

public class SessionFactoryManager
{
    public ISessionFactory CreateSessionFactory()
    {
        try {
            var autoMap = AutoMap.AssemblyOf<Artist>()
                .Where(t => typeof(Entity).IsAssignableFrom(t))
                .UseOverridesFromAssemblyOf<LocationMappingOverride>();

            return Fluently.Configure()
                .Database(PostgreSQLConfiguration.PostgreSQL82.ConnectionString(c => c.FromConnectionStringWithKey("ConnectionString")).AdoNetBatchSize(50))
                .Mappings(m => m.AutoMappings.Add(autoMap))
                .Mappings(m => m.FluentMappings.AddFromAssemblyOf<ServiceStack.Authentication.NHibernate.UserAuthMap>())
                .ExposeConfiguration(TreatConfiguration)
                .BuildSessionFactory();
        } catch (Exception ex) {
            var m = ex;
        }

        return null;
    }

    protected virtual void TreatConfiguration(NHibernate.Cfg.Configuration configuration)
    {
        configuration.SetProperty("generate_statistics", "true");
        configuration.SetProperty("current_session_context_class", "thread");
        var update = new SchemaUpdate(configuration);
        update.Execute(false, true);
    }
}

これはすべて私のアプリの残りの部分で機能しますが、NH auth リポジトリで何かを使用しようとすると、次のようになります。

No CurrentSessionContext configured (set the property current_session_context_class)!

誰が何を警告したのか手がかりを得た人はいますか?

[アップデート]

私のAppHost.Configure方法では、次を追加しました。

this.GlobalRequestFilters.Add ((req, res, vm) => {
    CurrentSessionContext.Bind(container.Resolve<NHibernate.ISession>());
});

役に立たない-私はそれをどのように処分するのかもわかりません:p

また、アプリの他のすべての部分と同じように ISessionFactory が挿入されているため、混乱しています。

https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.Authentication.NHibernate/NHibernateUserAuthRepository.cs#L20

確かにそれはうまくいくはずですか?

4

1 に答える 1

1

はい、現在のセッションをコンテキストに明示的にバインドする必要があります。

CurrentSessionContext.Bind(session);

セッションを構築した後。不要になった場合も忘れずに処分してください。

于 2014-12-09T09:28:09.447 に答える