2

RefIdStr プロパティを使用して、独自の User ドキュメントを UserAuth オブジェクトに関連付けるとともに、CustomAuthUserSession を作成しようとしています。

私の CustomUserAuthSession の OnAuthenticated メソッドでは、次のことを行っています

  1. セッションの UserAuthId による userAuth オブジェクトの取得
  2. Raven の IDocumentSession のインスタンスを作成する
  3. User の新しいインスタンスを作成し、ドキュメント セッションで Store を呼び出す
  4. userAuth の RefIdStr を更新する
  5. 私のuserauthレポでSaveUserAuthを呼び出す

ここに方法があります

public override void OnAuthenticated(IServiceBase authService, IAuthSession session, IOAuthTokens tokens, Dictionary<string, string> authInfo)
    {
        base.OnAuthenticated(authService, session, tokens, authInfo);

        var documentSession = authService.TryResolve<IDocumentSession>();

        //get userAuth from raven
        //var userAuth = documentSession.Load<UserAuth>(session.UserAuthId); //should this work?
        var userAuthRepo = authService.ResolveService<IUserAuthRepository>();
        var userAuth = userAuthRepo.GetUserAuth(session.UserAuthId);

        if (userAuth.RefIdStr == null)
        {
            //need to create new User and save to Raven
            var newUser = new User()
            {
                UserName = session.UserName,
                Email = session.Email,
                //Other properties...
            };

            documentSession.Store(newUser);

            this.UserID = newUser.Id; //UserId property on custom session

            userAuth.RefIdStr = newUser.Id;

            userAuthRepo.SaveUserAuth(userAuth); //getting error here...
        }
        else
        {
            //get User from raven
            var user = documentSession.Load<User>(userAuth.RefIdStr);

            this.UserID = user.Id;
        }
    }

SaveUserAuth メソッドに到達すると、次のエラーが発生します...

Attempted to associate a different object with id 'UserAuths/12345'.

ドキュメントストアとIOCをセットアップする方法は次のとおりです...

//Set up RavenDB
        var ravenStore = new DocumentStore()
        {
            ConnectionStringName = "RavenDB"
        }.Initialize();

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

        container.Register(ravenStore);
        container.Register(c => c.Resolve<IDocumentStore>().OpenSession()).ReusedWithin(ReuseScope.Request);

そして、認証レポを構成する方法....

//register auth repository
        container.Register<IUserAuthRepository>(p => new RavenUserAuthRepository(p.Resolve<IDocumentStore>(), p.Resolve<IDocumentSession>()));

        var authRepo = (RavenUserAuthRepository)container.Resolve<IUserAuthRepository>();

このエラーが発生する理由はありますか?

編集

明確にするために...私の意図は、これがsocialbootstrapapiプロジェクトと同様の方法で機能することです。

編集2

以下のコメントに従って、IUserAuthRepository の Funq 登録を次のように変更しました。

container.Register<IUserAuthRepository>(p => new RavenUserAuthRepository(p.Resolve<IDocumentStore>(), p.Resolve<IDocumentSession>())).ReusedWithin(ReuseScope.Request);

しかし、私はまだ同じエラーが発生しています...

4

1 に答える 1

1

SSの最新バージョンに更新すると、問題が修正されたようです。どの変更が問題を修正したかはわかりませんが、すべてが期待どおりに機能します。

于 2013-11-16T20:36:08.370 に答える