1、在ABP中,实体派生自Entity类。所有实体的主键名都是Id,但可以是不同的类型,通过泛型来区别,默认为int。
public class Person : Entity<Guid> { public virtual string Name { get; set; } public virtual DateTime CreationTime { get; set; } public Person() { CreationTime = DateTime.Now; } }
2、接口关系图(蓝色表示属性/方法)
Entity类实现了IEntity接口。如果不想从Entity类中派生,那么可以直接实现这些接口。但是,除非你有一个好的原因不从Entity类派生,否则,不建议这么做。
Entity<TPrimaryKey>重写了Equals方法
public override bool Equals(object obj) { if (obj == null || !(obj is Entity<TPrimaryKey>)) { return false; } //如果引用相同,则两个实体相同 if (ReferenceEquals(this, obj)) { return true; } //没有Id的对象互不相同 var other = (Entity<TPrimaryKey>)obj; if (IsTransient() && other.IsTransient()) { return false; } //如果两个实体的类型互相之间没有继承关系,则为不同实体 var typeOfThis = GetType(); var typeOfOther = other.GetType(); if (!typeOfThis.IsAssignableFrom(typeOfOther) && !typeOfOther.IsAssignableFrom(typeOfThis)) { return false; } //比较两者的Id是否相等 return Id.Equals(other.Id); }