我正在尝试使用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() }));这是Oracle10DatabaseFactory构造函数:
public Oracle10DatabaseFactory(Assembly assembly, string namespace, ConfigurationParameters parameters) { var fileCache = new ConfigurationFileCache(assembly, parameters.PathToConfigurationFolder); var config = fileCache.LoadConfigurationFromFile(); if (config == null) { var mapping = AutoMap.Assembly(assembly, new MappingConfiguration(new List<string>() { namespace })) .Conventions.Add<ReferenceIndexConvention>() .Conventions.Add<GuidIndexConvention>() .UseOverridesFromAssemblyOf<MappingConfiguration>(); this.sessionFactory = Fluently.Configure() .Database(OracleClientConfiguration.Oracle10.ConnectionString(c => c.FromConnectionStringWithKey("ZetesMobility_DataAccess_Connectionstring_Oracle")) .UseReflectionOptimizer()) .Mappings(m => m.AutoMappings.Add(mapping)) //.Add(baseMapping) .CurrentSessionContext("web") .ExposeConfiguration(c => c.BuildSchema(NHibernateExtensions.RecreateSchema())) .ExposeConfiguration(x => x.SetProperty("hbm2ddl.keywords", "auto-quote")) .ExposeConfiguration(fileCache.SaveConfigurationToFile) .BuildSessionFactory(); config = fileCache.LoadConfigurationFromFile(); this.sessionFactory = config.BuildSessionFactory(); } else { this.sessionFactory = config.BuildSessionFactory(); } }如何将身份验证类添加到映射配置?
非常感谢大家。
I'm trying to use the ServiceStack IUserAuthRepository implementation for Nhibernate. I have registered NHibernateUserAuthRepository in my service IOC container but I don't know how to tell Nhibernate to map the AuthUser and roles to database table.
My mapping happens when the container instanciates ISessionFactory (using FluentNhibernate).
Here's AppHost code:
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() }));Here's the Oracle10DatabaseFactory constructor:
public Oracle10DatabaseFactory(Assembly assembly, string namespace, ConfigurationParameters parameters) { var fileCache = new ConfigurationFileCache(assembly, parameters.PathToConfigurationFolder); var config = fileCache.LoadConfigurationFromFile(); if (config == null) { var mapping = AutoMap.Assembly(assembly, new MappingConfiguration(new List<string>() { namespace })) .Conventions.Add<ReferenceIndexConvention>() .Conventions.Add<GuidIndexConvention>() .UseOverridesFromAssemblyOf<MappingConfiguration>(); this.sessionFactory = Fluently.Configure() .Database(OracleClientConfiguration.Oracle10.ConnectionString(c => c.FromConnectionStringWithKey("ZetesMobility_DataAccess_Connectionstring_Oracle")) .UseReflectionOptimizer()) .Mappings(m => m.AutoMappings.Add(mapping)) //.Add(baseMapping) .CurrentSessionContext("web") .ExposeConfiguration(c => c.BuildSchema(NHibernateExtensions.RecreateSchema())) .ExposeConfiguration(x => x.SetProperty("hbm2ddl.keywords", "auto-quote")) .ExposeConfiguration(fileCache.SaveConfigurationToFile) .BuildSessionFactory(); config = fileCache.LoadConfigurationFromFile(); this.sessionFactory = config.BuildSessionFactory(); } else { this.sessionFactory = config.BuildSessionFactory(); } }How do I add the Authentication classes to mapping configuration?
Many Thanks everyone.
最满意答案
在你的Fluently.Config()中,部分Mappings(m - > m ...,你需要告诉FluentNhibernate在包中包含映射,如下所示:
.Mappings(m => m.FluentMappings .AddFromAssemblyOf<UserAuthPersistenceDto>())你的应该可能最终看起来像
.Mappings(m => { m.AutoMappings.Add(mapping); m.FluentMappings .AddFromAssemblyOf<UserAuthPersistenceDto>(); })In your Fluently.Config(), the section Mappings(m -> m..., you need to tell FluentNhibernate to include the mappings in the package, like so:
.Mappings(m => m.FluentMappings .AddFromAssemblyOf<UserAuthPersistenceDto>())Yours should probably end up looking something like
.Mappings(m => { m.AutoMappings.Add(mapping); m.FluentMappings .AddFromAssemblyOf<UserAuthPersistenceDto>(); })更多推荐
发布评论