ABP学习笔记:关于审计(Auditing)

  • Post author:
  • Post category:其他

事情是这样的,之前写的文件上传实体类派生自 AuditedEntity 类。想了想为啥要派生自这个,看了看其他实体大部分都是直接派生自Entity类。

查文档:

在多数应用程序中,实体一般都具有像 CreationTime 的属性,用来指示该实体是什么时候被创建的。APB 提供了一些有用的接口来实现这些类似的功能。

作为一个快速开发方式,你可以直接派生自 AuditedEntity 类,不需要再去实现 IAudited 接口,AuditedEntity 类有一个实现不同 ID 数据类型的泛型版本(默认是 int)。

如果不直接派生自AuditedEntity,也可以通过接口来实现 :

实现 IHasCreationTime 接口。当该实体被插入到数据库时, ABP 会自动设置该属性的值为当前时间。

public interface IHasCreationTime 
{ 
    DateTime CreationTime { get; set; } 
} 

我们可以给Person 类实现 IHasCreationTime 接口:

public class Person : Entity<long>, IHasCreationTime 
{     
	public virtual string Name { get; set; } 
    public virtual DateTime CreationTime { get; set; } 
    public Task() 
    { 
        CreationTime = DateTime.Now; 
    } 
} 

ICreationAudited 扩展自 IHasCreationTime 并且该接口具有属性 CreatorUserId :

public interface ICreationAudited : IHasCreationTime 
{     
	long? CreatorUserId { get; set; } 
} 

当保存一个新的实体时,ABP 会自动设置 CreatorUserId 的属性值为当前用户的 Id 。
你可以很容易的实现 ICreationAudited 接口,通过派生自实体类 CreationAuditedEntity。它有一个实现不同 Id主键 数据类型的泛型版本。

下面是一个为实现类似修改功能的接口:

public interface IModificationAudited 
{ 
    DateTime? LastModificationTime { get; set; }     
    long? LastModifierUserId { get; set; } 
} 

当更新一个实体时,APB 会自动设置这些属性的值。你只需要在你的实体类里面实现这些属性。
如果你想实现所有的审计属性,你可以直接扩展 IAudited 接口;示例如下:

public interface IAudited : ICreationAudited, IModificationAudited 
{ 
         
} 

版权声明:本文为dongnihao原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。