0

Ich möchte einen Datensatz speichern und die CreatedBy/ModifiedBy-GUID (ID) sowie die CreatedOn/ModifiedOn-Felder aus meiner Basis-Klasse dbContext anwenden.Überschreiben von SaveChanges zum Speichern von ModifiedBy und ModifiedOn mit MVC Core 1.0

fand ich this Artikel, der wie folgt aussieht, was ich erreichen will, aber in MVC-Core 1.0 Sie haben keinen Zugang zu System.Web zu Httpcontext zu bekommen.

Ein weiterer guter Artikel, der zeigt, was ich tun möchte, ist this

Das Codebeispiel ich dies ist am beziehe:

public override int SaveChanges() 
{ 
    var changeSet = ChangeTracker.Entries<IAuditable>(); 
    if (changeSet != null) 
    { 
     foreach (var entry in changeSet.Where(c => c.State != EntityState.Unchanged)) 
     { 
      entry.Entity.ModifiedDate = DateProvider.GetCurrentDate(); 
      entry.Entity.ModifiedBy = HttpContext.Current.User.Identity.Name; 
     } 
    } 
    return base.SaveChanges(); 
} 

Gibt es eine Möglichkeit, die Httpcontext sonst in Kern-Rahmen zu bekommen?

+0

können Sie die Abhängigkeitsinjektion verwenden, um IHttpContextAccessor in DbContext zu injizieren – tmg

Antwort

0

HttpContext.Current existiert nicht mehr. Sie können darauf zugreifen über die IHttpContextAccessor auf folgende Weise:

In Startup.cs hinzu: services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();

Dann:

private readonly IHttpContextAccessor httpContextAccessor_; 

public HomeController(IHttpContextAccessor httpContextAccessor) 
{ 
    httpContextAccessor_ = httpContextAccessor; 
    var username = httpContextAccessor_.HttpContext.User.Identity.Name; 
} 

Beachten Sie auch, dass IHttpContextAccessor nur in Klassen zur Verfügung stehen werden, die gelöst sind/erstellt vom DI-Container.