2016-08-18 4 views
1
public override int SaveChanges() 
{ 
    var modifiedEntries = ChangeTracker.Entries().Where(x => x.Entity is IAuditableEntity && x.State == EntityState.Added || x.State == EntityState.Modified); 
    ApplicationUser userLogIn = new ApplicationUser(); 

    foreach (var entry in modifiedEntries) 
    { 
     if(entry != null) 
     { 
      var entity = entry.Entity as IAuditableEntity; 

      //in MVC5 i use HttpContext.Current.User.Identity.Name//In MVC6 I don't know to do 

      var user = "User"; 
      var now = DateTime.Now; 
      if (entry.State == EntityState.Added) 
      { 
       entity.CreatedBy = user; 
       entity.CreatedOn = now; 
       entity.IsDeleted = false; 
      } 
      else 
      { 
       base.Entry(entity).Property(x => x.CreatedBy).IsModified = false; 
       base.Entry(entity).Property(x => x.CreatedOn).IsModified = false; 
       base.Entry(entity).Property(x => x.IsDeleted).IsModified = false; 
      } 
      entity.UpdatedBy = user; 
      entity.UpdatedOn = now; 
     } 
    } 

    return base.SaveChanges(); 
} 

ответ

0

Просто инжектировать IHttpContextAccessor в свой класс (как конструктор зависимость), то вы можете получить имя от User объекта внутри контекста:

private IHttpContextAccessor context; 
public SomeRepo(IHttpContextAccessor context) 
{ 
    this.context = context; 
} 

//in your method 
var userName = this.context.HttpContext.User.Identity.Name; 

Поскольку вы используете рамки идентичности, если вы нужны дополнительные данные от текущего пользователя, кроме его имени, вы можете ввести UserManager<ApplicationUser> и получить весь объект ApplicationUser, используя любой из его методов, например GetUserAsync(HttpContext.User)

+0

Спасибо большое, точно то, что мне нужно! – user3461429