Asp.net 我应该在哪里管理createdBy、modifiedBy、createDate和modifiedDate?

Asp.net 我应该在哪里管理createdBy、modifiedBy、createDate和modifiedDate?,asp.net,Asp.net,我想在每个数据库表中插入createdBy、modifiedBy、createDate和modifiedDate列,用于管理用户活动 这是我第一次尝试这样做。有没有我可以遵循的最佳实践?有什么设计模式可以很好地管理这一点吗 我的第一个想法是在我的业务逻辑层中这样做,在每个业务类的insert和update方法中,我都会这样做: class.createDate=DateTime.Now 或 class.modifiedDate=DateTime.Now class.modifiedBy=Curr

我想在每个数据库表中插入createdBy、modifiedBy、createDate和modifiedDate列,用于管理用户活动

这是我第一次尝试这样做。有没有我可以遵循的最佳实践?有什么设计模式可以很好地管理这一点吗

我的第一个想法是在我的业务逻辑层中这样做,在每个业务类的insert和update方法中,我都会这样做:

class.createDate=DateTime.Now

class.modifiedDate=DateTime.Now

class.modifiedBy=CurrentUser.Id

class.createdBy=CurrentUser.Id

还是有更好的办法


布莱恩有什么事要考虑的吗?您想要应用程序服务器的时间还是数据库服务器上的时间?我总是选择DB服务器。因此,在这种情况下,存储过程(或SQL语句)应该获取当前时间


< Krip >

< P> >一件事要考虑的是什么时候要盖章?您想要应用程序服务器的时间还是数据库服务器上的时间?我总是选择DB服务器。因此,在这种情况下,存储过程(或SQL语句)应该获取当前时间


-Krip

您应该仅在数据库标签上管理
CreatedDate
ModfiedDate
。CreatedDate的默认值应该是
Getdate()/SYSDATE
,您不需要设置此值。对于ModifiedDate,在每次更新时再次设置
GETDATE()/SYSDATE


您只需要将ModifiedBy userid从应用程序传递到数据库,如果是insert,则为列设置userid,如果是update only,则只更新Modified by userid列。

您应该仅在数据库标签上管理
CreatedDate
ModfiedDate
。CreatedDate的默认值应该是
Getdate()/SYSDATE
,您不需要设置此值。对于ModifiedDate,在每次更新时再次设置
GETDATE()/SYSDATE



您只需将ModifiedBy userid从应用程序传递到数据库,如果是insert,则为列设置userid,如果是update,则只需更新Modified by userid列。

这取决于您管理的业务对象的类型,以及创建/修改数据所需的规则。在大多数情况下,这是一个数据库审计跟踪,在业务逻辑层中不需要这些信息。在这种情况下,此信息应仅存在于数据库级别。如果您使用的是ORM,这可能意味着您将数据与对象一起保留。如果您使用的是存储过程,那么它们都需要知道如何使用用户名来标记记录。可以通过在列上设置默认值GetDate()来处理日期时间。

这取决于您正在管理的业务对象类型,以及创建/修改数据所需的规则。在大多数情况下,这是一个数据库审计跟踪,在业务逻辑层中不需要这些信息。在这种情况下,此信息应仅存在于数据库级别。如果您使用的是ORM,这可能意味着您将数据与对象一起保留。如果您使用的是存储过程,那么它们都需要知道如何使用用户名来标记记录。可以通过在列上设置默认值GetDate()来处理日期时间。

对于createdBy和modifiedBy,我通常使用当前用户的用户名在我的业务层中设置它。对于createDate和modifiedDate,我在数据库中的“after”触发器中执行此操作。

对于createdBy和modifiedBy,我通常使用当前用户的用户名在我的业务层中进行设置。对于createDate和modifiedDate,我在数据库中的“after”触发器中执行此操作。

我使用的是ORM。由于用户名或用户ID可以很容易地从asp.net代码中获得,所以这就是为什么我想在数据库存储过程的asp.net代码瞬间完成所有工作的原因。我正在使用ORM。由于用户名或用户ID可以很容易地从asp.net代码中获取,因此我想在asp.net代码中完成数据库存储过程的所有工作。那么执行操作的用户名或用户ID如何?是的,需要从业务层进行。但是,我在数据库级别使用默认值,以防有人直接使用数据库管理工具操纵数据。即使业务层/应用程序被绕过,这种用户名也会被戳穿。我还没有考虑过有人会直接从数据库中做一些事情。这是一个很好的观点。做此操作的用户名或用户ID如何?是的,需要从业务层获得。但是,我在数据库级别使用默认值,以防有人直接使用数据库管理工具操纵数据。即使业务层/应用程序被绕过,这种用户名也会被戳穿。我还没有考虑过有人会直接从数据库中做一些事情。这是一个很好的观点。你明白我所担心的。由于用户名或用户ID可以很容易地从asp.net代码中获取,所以我想在asp.net代码瞬间完成数据库存储过程的所有工作。如果有人在应用程序之外通过数据库工具操纵数据会怎么样?因此,一些数据库默认设置stamp username会很有用。例如,SQL Server为此目的提供了SUSER_SNAME()。然后,您仍然可以通过应用用户名来重写默认值。我还没有考虑过有人会直接从数据库中做一些事情。这是一个很好的观点。@Krip:这个问题是针对Asp.net的。我的建议是使用HttpContext.Current.User.Identity.Name获取应用程序中当前登录用户的用户名,并使用“after”触发器获取数据库服务器中的时间。这是因为该应用程序可能处于服务器场状态,并且时间可能在不同的web站点中