Browse Source

Resolved #1728: Remove overriding equals for entities and value types.

pull/1810/head
Halil İbrahim Kalkan 7 years ago
parent
commit
dc362dfbd9
  1. 31
      framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Entity.cs
  2. 27
      framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Values/ValueObject.cs

31
framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Entity.cs

@ -35,8 +35,7 @@ namespace Volo.Abp.Domain.Entities
Id = id;
}
/// <inheritdoc/>
public override bool Equals(object obj)
public bool EntityEquals(object obj)
{
if (obj == null || !(obj is Entity<TKey>))
{
@ -73,33 +72,7 @@ namespace Volo.Abp.Domain.Entities
return Id.Equals(other.Id);
}
/// <inheritdoc/>
public override int GetHashCode()
{
if (Id == null)
{
return 0;
}
return Id.GetHashCode();
}
public static bool operator ==(Entity<TKey> left, Entity<TKey> right)
{
if (Equals(left, null))
{
return Equals(right, null);
}
return left.Equals(right);
}
public static bool operator !=(Entity<TKey> left, Entity<TKey> right)
{
return !(left == right);
}
public override object[] GetKeys()
{
return new object[] {Id};

27
framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Values/ValueObject.cs

@ -7,23 +7,9 @@ namespace Volo.Abp.Domain.Values
public abstract class ValueObject
{
protected static bool EqualOperator(ValueObject left, ValueObject right)
{
if (ReferenceEquals(left, null) ^ ReferenceEquals(right, null))
{
return false;
}
return ReferenceEquals(left, null) || left.Equals(right);
}
protected static bool NotEqualOperator(ValueObject left, ValueObject right)
{
return !(EqualOperator(left, right));
}
protected abstract IEnumerable<object> GetAtomicValues();
public override bool Equals(object obj)
public bool ValueEquals(object obj)
{
if (obj == null || obj.GetType() != GetType())
{
@ -31,8 +17,10 @@ namespace Volo.Abp.Domain.Values
}
ValueObject other = (ValueObject)obj;
IEnumerator<object> thisValues = GetAtomicValues().GetEnumerator();
IEnumerator<object> otherValues = other.GetAtomicValues().GetEnumerator();
while (thisValues.MoveNext() && otherValues.MoveNext())
{
if (ReferenceEquals(thisValues.Current, null) ^
@ -47,15 +35,8 @@ namespace Volo.Abp.Domain.Values
return false;
}
}
return !thisValues.MoveNext() && !otherValues.MoveNext();
}
public override int GetHashCode()
{
return GetAtomicValues()
.Select(x => x != null ? x.GetHashCode() : 0)
.Aggregate((x, y) => x ^ y);
return !thisValues.MoveNext() && !otherValues.MoveNext();
}
// Other utilility methods
}
}

Loading…
Cancel
Save