Je suis en train de mettre en œuvre une classe d'entité de base abstraite qui a redéfini les méthodes equals et GetHashcode... Voici ma classe d'entité de base
public abstract class Entity
{
public virtual TId Id { get; protected set; }
protected virtual int Version { get; set; }
public override bool Equals(object obj)
{
return Equals(obj as Entity);
}
private static bool IsTransient(Entity obj)
{
return obj != null &&
Equals(obj.Id, default(TId));
}
private Type GetUnproxiedType()
{
return GetType();
}
public virtual bool Equals(Entity other)
{
if (other == null)
return false;
if (ReferenceEquals(this, other))
return true;
if (!IsTransient(this) &&
!IsTransient(other) &&
Equals(Id, other.Id))
{
var otherType = other.GetUnproxiedType();
var thisType = GetUnproxiedType();
return thisType.IsAssignableFrom(otherType) ||
otherType.IsAssignableFrom(thisType);
}
return false;
}
public override int GetHashCode()
{
if (Equals(Id, default(TId)))
return base.GetHashCode();
return Id.GetHashCode();
}
}
Comment la valeur de l'ID de base de l'entité est-elle assignée?
Les clés primaires de mes classes ont des types de données différents et les noms sont également différents pour chaque classe. Voici un exemple de mes classes:
public class Product : Entity
{
public virtual Guid ProductId { get; set; }
public virtual string Name { get; set; }
public virtual string Description { get; set; }
public virtual Decimal UnitPrice { get; set; }
}
public class Customer : Entity
{
public virtual int CustomerID { get; set; }
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
public virtual int Age { get; set; }
}
Je suis un peu confus sur la manière de définir la propriété ID de la classe de base. Est-ce que quelqu'un peut me suggérer à ce sujet, j'apprécierai toute aide.