1

カスタム AuthUserSession (ちなみに、これは AppHost プロジェクトとは別のプロジェクトにあります) 内で Ormlite を使用して適切なデータベース呼び出しを行いたいと考えています。しかし、生のデータベース接続オブジェクトしか取得できないようです。

public class CustomUserSession : AuthUserSession
{
    public string CustomProperty { get; set; }

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

         // using (var Db = authService.TryResolve<ServiceStack.OrmLite.OrmLiteConnectionFactory>().OpenDbConnection())
        using (var Db = authService.TryResolve<ServiceStack.OrmLite.IDbConnectionFactory>().OpenDbConnection())
        {
            // it seems I can make long winded calls to database using 'Db'  but
            // instead I want to eliminate this 'using statement' and simply do

            // var result = Db.FirstOrDefault<MyTable>(x => x.Id == userId);
            // CustomProperty = result.aStringField;
        }
    }
}

[補足: ドキュメントでは、セッションにデータを追加するには次のことを行う必要があるとよく言われますが、私のセッション オブジェクトは、それがなくても機能しているように見えます。つまり、派生した「サービス」クラスでデータを公開しています...どこかでポイントを見逃していませんか?:]

//Important: You need to save the session!
authService.SaveSession(session, SessionExpiry);

// 更新*

私のAppHostにはこれがあります:

var connectionString = ConfigurationManager.ConnectionStrings["AppDb"].ConnectionString;
container.Register<IDbConnectionFactory>(c => new OrmLiteConnectionFactory(connectionString, SqlServerDialect.Provider));
container.Register<IUserAuthRepository>(c => new OrmLiteAuthRepository(c.Resolve<IDbConnectionFactory>()));

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

Gavin の回答は非常に役に立ちますが、それでも Ormlite メソッドを提供する「Db」オブジェクトを提供することはできません。

作成してみた

protected ServiceStack.OrmLite.IDbConnectionFactory Db1 { get; set; }

次の行で CustomUserSession() コンストラクターに接続します。

this.Db1 = EndpointHost.AppHost.TryResolve<ServiceStack.OrmLite.IDbConnectionFactory>();

しかし、それは望みどおりに機能しませんでした。

4

1 に答える 1