我们目前正在开发一个使用实体框架进行数据存储的项目。该项目的一个要求是我们对每个实体存储,创建,创建,修改,修改,等等。
我们选择使用两个项目将数据与Web应用程序分开,1个用于数据,1个用于Web应用程序。
我创建了一个接口IAuditable
,它在数据项目中定义如下:
Public Interface IAuditable
Property Created As DateTime
Property CreatedBy As ApplicationUser
Property Modified As DateTime
Property ModifiedBy As ApplicationUser
Property IsDeleted As Boolean
Property Deleted As DateTime
Property DeletedBy As ApplicationUser
End Interface
我希望通过这样做,我可以像这样覆盖数据项目中SaveChanges
的{{1}}方法:
DbContext
现在,问题是类库中不存在Public Overrides Function SaveChanges() As Integer
For Each AuditableEntity In ChangeTracker.Entries(Of IAuditable)
If AuditableEntity.State = EntityState.Added Or AuditableEntity.State = EntityState.Modified Then
Dim CurrentUser As ApplicationUser = HttpContext.Current.User.Identity
AuditableEntity.Entity.Modified = DateTime.Now
AuditableEntity.Entity.ModifiedBy = CurrentUser
If AuditableEntity.State = EntityState.Added Then
AuditableEntity.Entity.Created = DateTime.Now
AuditableEntity.Entity.CreatedBy = CurrentUser
Else
AuditableEntity.Property(Function(p) p.Created).IsModified = False
AuditableEntity.Property(Function(p) p.CreatedBy).IsModified = False
End If
End If
Next
Return MyBase.SaveChanges()
End Function
。
将当前用户传递给此功能的最佳方法是什么?
我知道我可以将HttpContext.Current.User.Identity
添加到项目中然后将能够访问System.Web
但是这将限制我仅使用Web应用程序中的数据...并且有将来我们需要在其他类型的项目中使用这个数据类。
是否有一个单独的HttpContext
是一个好主意,它继承自类库中的DbContext
?在可以访问DbContext
?
答案 0 :(得分:1)
而不是使用override
为什么不声明一个以用户身份作为参数的新方法,如下所示:
public int SaveChanges(Identity identity)
{
// Your code
return SaveChanges();
}
当然,您必须修改SaveChanges
来电,然后通过身份:
db.SaveChanges(HttpContext.Current.User.Identity);