-1
私はPostgresql DBにアクセスするすべてのDbContextを持っていますが、接続セッションがDBで始まるときには、小さなSQLコマンドを1回実行する必要があります。私はすべての相互作用のためにこれを行う必要があります。具体的には、ユーザー名を記録したセッション変数を設定する関数です。Entity Frameworkコアの接続データベースでイベントを起動できますか?
EFコアでこれを処理するには何かできますか?
--SOLUTION--
私はbricelamが言うように、私はOnConfiguringで直接接続を指定することができることを実現しませんでした。セッションごとに変数があるので、すべての接続でこれを行う必要があります。これはデータベースのユーザー名ではなく、アプリケーションログシステムのユーザー名です。
public ContratoInternetDbContext(DbContextOptions<ContratoInternetDbContext> options,
IOptions<AppSettings> configs)
: base(options)
{
_appSettings = configs.Value;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var conn = new NpgsqlConnection(_appSettings.ConnectionString);
conn.StateChange += (snd, e) =>
{
if ((e.CurrentState != e.OriginalState) && (e.CurrentState == ConnectionState.Open))
{
_cmmSetVarSession.ExecuteNonQuery();
}
};
optionsBuilder.UseNpgsql(conn);
_cmmSetVarSession = conn.CreateCommand();
_cmmSetVarSession.CommandText = "select sessao_set_var('usuario', 'CENTRAL_CLIENTE')";
}
は次のように聞こえますXY問題:あなたはYのやり方を尋ねていますが、問題は以前に選択されたパスXにあります。なぜこのユーザー名を設定する必要がありますか、どのように使いたいのですか?接続が開かれるまでの時間*?現在のところ、この質問に答えるには十分な文脈が欠けています。 –
私はあなたがこの問題を解決できると思いますStateClangeイベントのDbContextデータベースプロパティにイベントハンドラを追加 –