Mik*_*iaz 1 asp.net entity-framework
当记录在我的数据库中更新时,我需要能够保存编辑它的人.
目前在我的存储库中我这样做
pt.ModifiedBy = HttpContext.Current.User.Identity.Name;
Run Code Online (Sandbox Code Playgroud)
必须有更好的方法来做这个或这是唯一的方法吗?
通过使用HttpContext.Current.User你紧紧地捆绑在一起你DbContext有HttpContext这不是在情况下,你会暴露你一个好主意,DbContext到非网络环境(单元测试,WCF,WPF等).
您可以使用System.Security.Principal.IIdentity,就像在ASP.NET(System.Web.HttpContext.Current.User.Identity),WCF(System.ServiceModel.OperationContext.Current.ServiceSecurityContext.PrimaryIdentity)和Thread(Thread.CurrentPrincipal.Identity)中公开一样.
然后,在它的构造函数中DbContext接受IIdentity,并且每当初始化的上下文传递适当的IIdentity(从当前上下文).
例如(基于@qujck答案):
public class MyContext : DbContext
{
private readonly IIdentity _identity;
public DbContext(IIdentity identity)
{
this._identity = identity;
}
public override int SaveChanges()
{
//you may need this line depending on your exact configuration
//ChangeTracker.DetectChanges();
foreach (DbEntityEntry o in GetChangedEntries())
{
IEntity entity = o.Entity as IEntity;
entity.ModifiedBy = this._identity.Name;
}
return base.SaveChanges();
}
}
// Usage (ASP.NET):
var context = new DbContext(System.Web.HttpContext.Current.User.Identity);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1103 次 |
| 最近记录: |