Servicestack UserAuth Persistence using Nhibernate (using ServiceStack.Authentication.NHibernate)

StackOverflow https://stackoverflow.com/questions/21572028

문제

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.

도움이 되었습니까?

해결책

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>();
            })
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top