【发布时间】:2018-06-07 02:27:03
【问题描述】:
我正在尝试找出授权用户当前正在尝试保存数据并记录他们的电子邮件。
我的 dbcontext 中有一个基本设置,用于更新时间戳,但我不知道如何访问用户信息:
public override int SaveChanges()
{
AddTimestamps();
return base.SaveChanges();
}
public override async Task<int> SaveChangesAsync()
{
AddTimestamps();
return await base.SaveChangesAsync();
}
private void AddTimestamps()
{
var entities = ChangeTracker.Entries()
.Where(x => x.State == EntityState.Added || x.State == EntityState.Modified);
var currentUser = "dumm@dummy.com" // This i haven't been able to figure out how to retrieve
foreach (var entity in entities)
{
if (entity.State == EntityState.Added)
{
((BaseEntity)entity.Entity).DateCreated = DateTime.UtcNow;
((BaseEntity)entity.Entity).CreatedBy = currentUsername;
}
((BaseEntity)entity.Entity).DateModified = DateTime.UtcNow;
((BaseEntity)entity.Entity).ModifiedBy = currentUsername;
}
}
}
更多的背景知识,这一切都建立在 ASP Core 2 和 EF Core 之上。 DBContext 位于我的 APIContoso 项目中,该项目使用名为 IDPContoso 的自定义身份提供程序,该身份提供程序基于 ASP Core 2 和 Identity Server4 构建。
如何在 DBContext 中获取用户的电子邮件以便记录?
【问题讨论】:
-
你实现了
DbContext是从IdentityDbContext派生的还是你想在SavaChange时实现自定义身份验证。 -
ChangeTracker.Entries
允许您获取特定类型的所有附加条目,而不是强制转换它们并可能遇到空引用。
标签: asp.net entity-framework entity-framework-core identityserver4 asp.net-core-2.0