-1
我有一个DbContext与所有的工作来访问我的Postgresql数据库,但是当连接会话以数据库启动时,我需要运行一个小小的SQL命令。我需要为每次互动做到这一点。更具体地说,这是一个设置会话变量和用户名记录的功能。我可以在实体框架核心中的连接数据库上触发事件吗?
在EF Core中可以做些什么来处理?
--SOLUTION--
我没有意识到,我可以直接在OnConfiguring像bricelam说,指定的连接。我需要在每个连接中执行此操作,因为这是会话中的变量。它不是数据库的用户名,而是应用程序日志记录系统。
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.为什么你必须设置这个用户名,你想如何使用它,为什么你必须设置它*每个连接打开的时间*?目前这个问题缺乏足够的上下文来回答。 –
我认为你可以解决这个问题添加一个事件处理程序到你的DbContext数据库属性的StateChange事件 –