0

填写审计字段的通用方法

我想在添加或修改每个实体时填写它们的审计字段。

例如,Customer实体有CreatedDate, UpdatedDate。对于具有CreatedDate,的订单实体也是如此UpdatedDate

我可以在AddCustomerorUpdateCustomer方法或NewOrder,UpdateOrder方法中更新它们。

对于AddCustomer

customer.CreatedDate = DateTime.Now;
customer.UpdatedDate= DateTime.Now;

对于UpdateCustomer

customer.UpdatedDate= DateTime.Now

我想做什么而不是在每个方法中重复代码,我可以有一个接受泛型类型和更新的泛型方法吗?

private void FillAuditFields<T>(ref T entity)
{
}

我应该在里面做什么FillAuditFields(如果可以的话)说entity.CreatedByentity.UpdatedBy。还是有更好的方法来做到这一点?

谢谢你的帮助

4

2 回答 2

2

根本不需要泛型,您只需要您的 Customer 和 Order 类实现一个接口,例如:

public interface IAuditable
{
    DateTime CreatedDate{get;set;}
    DateTime UpdatedDate{get;set;}
}

并在适当的地方有 2 种方法

public void AuditableCreated(IAuditable auditable)
{
    auditable.CreatedDate = DateTime.Now;
}
public void AuditableUpdated(IAuditable auditable)
{
    auditable.UpdatedDate = DateTime.Now;
}
于 2013-03-14T17:45:18.007 回答
1

让您的实体使用要在所有实体上设置的字段实现接口,并使用“where”子句将 T 限制为实现该接口的类。

于 2013-03-14T17:44:53.530 回答