/// <summary> /// Equality method between two objects of the same type. /// Because the Equals method is strongly typed by generic constraints, /// it is not necessary to test for the correct object type. /// For safety we just want to match on business key value - in this case the fields /// that cannot be different between the two objects if they are supposedly equal. /// </summary> /// <param name="obj">The other object of this type that we are testing equality with</param> /// <returns></returns> public virtual bool Equals(TenantSpecificAggregateRootBase <TIdType> obj) { if (obj != null) { // Transient objects are not considered as equal if (IsTransient() && obj.IsTransient()) { return(false); } else { // For safe equality we need to match on business key equality. // Base domain entities are functionally equal if their key and metadata are equal. // Subclasses should extend to include their own enhanced equality checks, as required. return(Id.Equals(obj.Id) && Culture.Equals(obj.Culture)); } } return(false); }
/// <summary> /// Comparison method between two objects of the same type, used for sorting. /// Because the CompareTo method is strongly typed by generic constraints, /// it is not necessary to test for the correct object type. /// </summary> /// <param name="other">The other object of this type we are comparing to</param> /// <returns></returns> public virtual int CompareTo(TenantSpecificAggregateRootBase <TIdType> other) { // put comparison of properties in here // for base object we'll just sort by title return(Name.CompareTo(other.Name)); }