RefIdStr プロパティを使用して、独自の User ドキュメントを UserAuth オブジェクトに関連付けるとともに、CustomAuthUserSession を作成しようとしています。
私の CustomUserAuthSession の OnAuthenticated メソッドでは、次のことを行っています
- セッションの UserAuthId による userAuth オブジェクトの取得
- Raven の IDocumentSession のインスタンスを作成する
- User の新しいインスタンスを作成し、ドキュメント セッションで Store を呼び出す
- userAuth の RefIdStr を更新する
- 私の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);
しかし、私はまだ同じエラーが発生しています...