public virtual bool Equals(BaseEntity other) { if (other == null) return false; if (ReferenceEquals(this, other)) return true; if (IsTransient(this) || IsTransient(other) || !Equals(Id, other.Id)) return false; var otherType = other.GetUnproxiedType(); var thisType = GetUnproxiedType(); return thisType.IsAssignableFrom(otherType) || otherType.IsAssignableFrom(thisType); }
private static bool IsTransient(BaseEntity obj) { return obj != null && Equals(obj.Id, default(int)); }