by Guest » 16 Jan 2025, 11:37
Ich versuche, eine Klassenbibliothek zu entwickeln, in der ich benutzerdefinierten DbContext implementieren möchte. In der SaveChanges-Methode des DbContext muss ich zu Prüfzwecken die Informationen des aktuellen Benutzers (Abteilung, Benutzername usw.) abrufen. Ein Teil des DbContext-Codes ist unten:
Code: Select all
public override int SaveChanges()
{
// find all changed entities which is ICreateAuditedEntity
var addedAuditedEntities = ChangeTracker.Entries()
.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();
}
Zwei Optionen fallen mir ein:
- Verwenden von HttpContext.Items um Benutzerinformationen zu behalten, IHttpContextAccessor einzufügen und Informationen von
abzurufen(In diesem Fall hängt DbContext von HttpContext ab, ist es
korrekt?)
- Verwenden des ThreadStatic-Objekts anstelle von HttpContext.Items und Informationen vom Objekt abrufen (ich habe einige Beiträge gelesen
dass ThreadStatic nicht sicher ist)
Frage : Welche Passt es am besten in meinen Fall? Gibt es einen anderen Weg, den Sie vorschlagen?
Ich versuche, eine Klassenbibliothek zu entwickeln, in der ich benutzerdefinierten DbContext implementieren möchte. In der SaveChanges-Methode des DbContext muss ich zu Prüfzwecken die Informationen des aktuellen Benutzers (Abteilung, Benutzername usw.) abrufen. Ein Teil des DbContext-Codes ist unten:
[code]public override int SaveChanges()
{
// find all changed entities which is ICreateAuditedEntity
var addedAuditedEntities = ChangeTracker.Entries()
.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();
}
[/code]
Zwei Optionen fallen mir ein:
[list]
[*]Verwenden von HttpContext.Items um Benutzerinformationen zu behalten, IHttpContextAccessor einzufügen und Informationen von
abzurufen[code]HttpContext.Items[/code](In diesem Fall hängt DbContext von HttpContext ab, ist es
korrekt?)
[*]Verwenden des ThreadStatic-Objekts anstelle von HttpContext.Items und Informationen vom Objekt abrufen (ich habe einige Beiträge gelesen
dass ThreadStatic nicht sicher ist)
[/list]
[b]Frage [/b] : Welche Passt es am besten in meinen Fall? Gibt es einen anderen Weg, den Sie vorschlagen?