我创建了一个逻辑来审核所有数据库插入/更新/删除。 我从 DBContext 中覆盖了 SaveChanges 。
[DbConfigurationType(typeof(DataContextConfiguration))]
public sealed class Conexao : DbContext
{
public Conexao(): base("connectionString")
{
base.Configuration.LazyLoadingEnabled = false;
base.Configuration.ProxyCreationEnabled = false;
base.Configuration.AutoDetectChangesEnabled = true;
base.Database.CommandTimeout = 120000;
}
public override int SaveChanges()
{
/*
audit logic goes here
*/
return base.SaveChanges();
}
}
但我需要注册调用此操作的用户。 问题是我的类在web和app上下文中使用,因此,访问HttpContext来检索活动用户不是解决方案。
如何将用户传递给它?
我是C#和MVC的新手,我对服务,存储库,接口等不熟悉...... 请详细说明你的答案。
答案 0 :(得分:0)
假设活跃用户意味着登录用户,您可以从当前主体访问用户ID(或用户名,或您在登录时存储在索赔中的任何其他内容)线程,像这样:
var currnentPrincipal = Thread.CurrentPrincipal as ClaimsPrincipal;
var userId=int.Parse(currnentPrincipal.FindFirst(ClaimTypes.NameIdentifier).Value);
您可以在SaveChanges()
覆盖中使用此功能;请注意,它没有引用与Web相关的类。
另一个更复杂的解决方案是将HttpContext包装到服务中并通过接口将其注入上下文(或工作单元或您的存储库),但根据我的经验,这比工作更多的工作它会带来好处。