servicestack,Nhibernate,Fluent Nhibernate,servicestack" /> servicestack,Nhibernate,Fluent Nhibernate,servicestack" />

使用Nhibernate的Servicestack UserAuth持久性(使用Servicestack.Authentication.Nhibernate)

使用Nhibernate的Servicestack UserAuth持久性(使用Servicestack.Authentication.Nhibernate),nhibernate,fluent-nhibernate,servicestack,Nhibernate,Fluent Nhibernate,servicestack,我正在尝试为Nhibernate使用ServiceStack IUserAuthRepository实现。 我已经在我的服务IOC容器中注册了NHibernateUserAuthRepository,但我不知道如何告诉Nhibernate将AuthUser和角色映射到数据库表 当容器实例化ISessionFactory时(使用FluentNhibernate),就会发生我的映射 以下是AppHost代码: container.Register<ICacheClient>(new Me

我正在尝试为Nhibernate使用ServiceStack IUserAuthRepository实现。 我已经在我的服务IOC容器中注册了
NHibernateUserAuthRepository
,但我不知道如何告诉Nhibernate将
AuthUser
和角色映射到数据库表

当容器实例化ISessionFactory时(使用FluentNhibernate),就会发生我的映射

以下是AppHost代码:

container.Register<ICacheClient>(new MemoryCacheClient());

container.Register<IDatabaseFactory>(c => new Oracle10DatabaseFactory(_DomainAssembly, _DomainAssemblyName,
                                                            c.Resolve<ConfigurationParameters>()));
// Register EventPublisher
        container.RegisterAutoWiredAs<EventPublisher, IEventPublisher>().ReusedWithin(ReuseScope.Request);
        container.RegisterAutoWiredAs<EventPublisherInterceptor, IInterceptor>().ReusedWithin(ReuseScope.Request);

// Register Session & UnitOfWork
container.Register<NHibernate.ISession>(item =>
container.Resolve<IDatabaseFactory>().SessionFactory.OpenSession(new EventPublisherInterceptor(container.Resolve<IEventPublisher>())))
            .ReusedWithin(ReuseScope.Request);

container.Register<IUnitOfWork>(item => new UnitOfWork(container.Resolve<NHibernate.ISession>())).ReusedWithin(ReuseScope.Request);

Plugins.Add(new AuthFeature(() => new AuthUserSession(),
                new IAuthProvider[] { new CredentialsAuthProvider() }));
如何将身份验证类添加到映射配置

非常感谢大家。

在Fluently.Config()中的映射部分(m->m…)中,您需要告诉FluentNhibernate在包中包含映射,如下所示:

            .Mappings(m =>
                m.FluentMappings
                    .AddFromAssemblyOf<UserAuthPersistenceDto>())
.Mappings(m=>
m、 FluentMappings
.AddFromAssemblyOf())
你的应该看起来像

            .Mappings(m =>
            {
                m.AutoMappings.Add(mapping);
                m.FluentMappings
                    .AddFromAssemblyOf<UserAuthPersistenceDto>();
            })
.Mappings(m=>
{
m、 自动映射。添加(映射);
m、 FluentMappings
.AddFromAssemblyOf();
})

现在,当我尝试创建默认用户时,出现Nhibernate异常“没有绑定到当前上下文的会话”。userRepository.GetUserAuthByUserName(“admin”)失败。如何/在何处打开会话(ISessionFactory.OpenSession())?我正在尝试研究它,它很奇怪,因为GitHub中的代码与nuget包附带的Api不同。公共NHibernateUserAuthRepository构造函数采用“ISessionFactory”,但GitHub中的代码是公共NHibernateUserAuthRepository(INHibernateSessionProvider sessionProvider)。我当时很难理解问题出在哪里。我认为您的类应该调用ISessionFactory.OpenSession(),因为它在构造函数中使用了dfactory。Github中的代码是最近的,据我所知还没有作为NUGET部署(我不确定是否/何时会发生)。您的代码:container.Resolve().SessionFactory.OpenSession(新的EventPublisherInterceptor(container.Resolve())).ReusedIn(ReuseScope.Request);会议什么时候开始?UserAuthRepository要求会话在使用之前由其他人打开。这有意义吗?
            .Mappings(m =>
            {
                m.AutoMappings.Add(mapping);
                m.FluentMappings
                    .AddFromAssemblyOf<UserAuthPersistenceDto>();
            })