事情是这样的,之前写的文件上传实体类派生自 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 版权协议,转载请附上原文出处链接和本声明。