私はカスタムDbContext
を実装するクラスライブラリを開発しようとしています。 DbContext
のSaveChanges
メソッドでは、監査目的で現在のユーザーの情報(部門、ユーザー名など)を取得する必要があります。 DbContext
コードの一部は以下の通りです:Netコアを使用してDbContextでユーザー情報を取得する方法
public override int SaveChanges()
{
// find all changed entities which is ICreateAuditedEntity
var addedAuditedEntities = ChangeTracker.Entries<ICreateAuditedEntity>()
.Where(p => p.State == EntityState.Added)
.Select(p => p.Entity);
var now = DateTime.Now;
foreach (var added in addedAuditedEntities)
{
added.CreatedAt = now;
added.CreatedBy = ?;
added.CreatedByDepartment = ?
}
return base.SaveChanges();
}
心に来る二つのオプション:
- IHttpContextAccessorを注入し、
DbContext
は異なり、この場合、(HttpContext.Items
から情報を取得し、ユーザー情報を保持するためにHttpContext.Items
を使用しましたHttpContext
、それは ですか? HttpContext.Items
の代わりにThreadStaticオブジェクトを使用し、objeから情報を取得していますか? CT(私はThreadStaticが安全ではないこと、いくつかの記事に を読む)
質問:私の場合に最も適しているのですか?あなたが提案する別の方法がありますか?
あなたのDbContextでIHttpContextAccessorに直接依存するのではなく、AuditLoggerのようなサービスクラスを作成してDbContextに依存させないようにしてください。AuditLoggerはIHttpContextAccessorを独自の内部実装の詳細 –
に依存することができます。それを実装しようとする。ありがとう。 –