使用Nhibernate的Servicestack UserAuth持久性(使用Servicestack.Authentication.Nhibernate)
我正在尝试为Nhibernate使用ServiceStack IUserAuthRepository实现。 我已经在我的服务IOC容器中注册了使用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
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>();
})