public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != GetType()) return false;
var value = obj as Association;
if (value == null) return false;
return
Prop0 == value.Prop0 &&
Prop1 != null && value.Prop1 != null &&
Prop1.Equals(value.Prop1) &&
Prop2 == value.Prop2;
}