在类库中访问Web应用程序的当前用户的最佳方法

时间:2015-08-28 11:40:51

标签: .net entity-framework asp.net-identity

我们目前正在开发一个使用实体框架进行数据存储的项目。该项目的一个要求是我们对每个实体存储,创建,创建,修改,修改,等等。

我们选择使用两个项目将数据与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

的Web应用程序中

1 个答案:

答案 0 :(得分:1)

而不是使用override为什么不声明一个以用户身份作为参数的新方法,如下所示:

public int SaveChanges(Identity identity)
{
    // Your code
    return SaveChanges();
}

当然,您必须修改SaveChanges来电,然后通过身份:

db.SaveChanges(HttpContext.Current.User.Identity);