servicestack,ravendb,Oauth,servicestack,Ravendb" /> servicestack,ravendb,Oauth,servicestack,Ravendb" />

使用RavenDB时,后续ServiceStack OAuth尝试失败(UnuniqueObjectException)

使用RavenDB时,后续ServiceStack OAuth尝试失败(UnuniqueObjectException),oauth,servicestack,ravendb,Oauth,servicestack,Ravendb,我正在尝试使用ServiceStack身份验证插件以及RavenDB和RavenUserAuthRepository包 AppHost var store = new DocumentStore() { ConnectionStringName = "ServiceStackAuthSample" } .Initialize(); IndexCreation.CreateIndexes(typeof

我正在尝试使用ServiceStack身份验证插件以及RavenDB和RavenUserAuthRepository包

AppHost

var store = new DocumentStore()
        {
            ConnectionStringName = "ServiceStackAuthSample"
        }
            .Initialize();

        IndexCreation.CreateIndexes(typeof(RavenUserAuthRepository).Assembly, store);

        container.Register(store);
        var session = container.Resolve<IDocumentStore>().OpenSession();
        container.Register(p => session).ReusedWithin(ReuseScope.Request);

        container.Register<IUserAuthRepository>(p => new RavenUserAuthRepository(p.Resolve<IDocumentStore>(), p.Resolve<IDocumentSession>()));
旧的

public UserAuth GetUserAuth(string userAuthId)
{
    using (var session = documentStore.OpenSession())
    {
        int intAuthId;
        return int.TryParse(userAuthId, out intAuthId) 
            ? session.Load<UserAuth>(intAuthId) 
            : session.Load<UserAuth>(userAuthId);
    }
}
public UserAuth GetUserAuth(string userAuthId)
{
    using (_session)
    {
        int intAuthId;
        return int.TryParse(userAuthId, out intAuthId) 
            ? _session.Load<UserAuth>(intAuthId) 
            : _session.Load<UserAuth>(userAuthId);
    }
}
public UserAuth GetUserAuth(字符串userAuthId)
{
使用(var session=documentStore.OpenSession())
{
int intAuthId;
返回int.TryParse(userAuthId,out intAuthId)
?会话加载(intAuthId)
:session.Load(userAuthId);
}
}
固定的

public UserAuth GetUserAuth(string userAuthId)
{
    using (var session = documentStore.OpenSession())
    {
        int intAuthId;
        return int.TryParse(userAuthId, out intAuthId) 
            ? session.Load<UserAuth>(intAuthId) 
            : session.Load<UserAuth>(userAuthId);
    }
}
public UserAuth GetUserAuth(string userAuthId)
{
    using (_session)
    {
        int intAuthId;
        return int.TryParse(userAuthId, out intAuthId) 
            ? _session.Load<UserAuth>(intAuthId) 
            : _session.Load<UserAuth>(userAuthId);
    }
}
public UserAuth GetUserAuth(字符串userAuthId)
{
使用(\u会话)
{
int intAuthId;
返回int.TryParse(userAuthId,out intAuthId)
?_session.Load(intAuthId)
:_session.Load(userAuthId);
}
}
这将导致createOrgerAuthSession通过一个会话实例(通过GetUserAuth)获取UserAuth,然后使用私有会话成员保存UserAuth,从而导致冲突


谢谢你的提示,大卫

我不熟悉您在这里展示的ServiceStack DI API,但在我看来,您正在创建和注册一个DocumentStore(这很好),然后还创建了一个IDocumentSession并只注册了该实例。每个请求都应该有一个唯一的IDocumentSession实例,因此需要将容器配置为每个请求都将调用DocumentStore的OpenSession方法。

我不熟悉您在这里展示的ServiceStack DI API,但在我看来,您正在创建并注册一个DocumentStore(这很好)然后还要创建一个IDocumentSession并只注册该实例。每个请求都应该有一个唯一的IDocumentSession实例,因此需要配置容器,以便每个请求都调用DocumentStore的OpenSession方法