c# – 在基类中实现IEquatable
发布时间:2020-12-15 22:02:46 所属栏目:百科 来源:网络整理
导读:我首先使用ASP.NET MVC和EntityFramework代码. 我正在尝试为将保存到我的数据库的所有对象创建一个基类(这里称为Entity类). 有没有一种在基类中实现IEquatable的好方法?在我的实现中,我检查类型和ID – 这是一个很好的方法吗?这总是会返回最终派生类型吗?
我首先使用ASP.NET MVC和EntityFramework代码.
我正在尝试为将保存到我的数据库的所有对象创建一个基类(这里称为Entity类). 有没有一种在基类中实现IEquatable的好方法?在我的实现中,我检查类型和ID – 这是一个很好的方法吗?这总是会返回最终派生类型吗?中级父母怎么样? 对象 public abstract class Entity : IEquatable<Entity> { public int ID { get; set; } public string Name { get; set; } public Entity(string Name) { this.Name = Name; } public override string ToString() { return Name; } public override int GetHashCode() { return ID.GetHashCode(); } public override bool Equals(object obj) { return this == (Entity)obj; } public bool Equals(Entity other) { return this == other; } public static bool operator ==(Entity x,Entity y) { return Object.ReferenceEquals(x,y) ? true : ((object)x == null || (object)y == null) ? false : (x.GetType() == y.GetType() && x.ID.Equals(y.ID)); } public static bool operator !=(Entity x,Entity y) { return !(x == y); } } public abstract class Content : Entity { public Content(string Name) : base(Name) { } } public class Page : Content { public string Body { get; set; } public Page(string Name) : base(Name) { } } public class User : Entity { public User(string Name) : base(Name) { } } 数据库 每个派生对象类型通常都存在于单独的数据库中.但是,会有一些具有中间继承父项的对象共享主键. 假设有三个表包含以下列: >内容 > ID >页面 > ID >用户 > ID 因此,页面和内容表共享主键. 解决方法
>没有必要实现IEquitable,它不提供任何值(性能值,可读性值).
>在您的比较中,您仅依赖于引用相等性检查.您还应该检查ID相等性. >您的GetHashCode()实现是次优的,您也应该包含实体的类型. >您确定所有实体都具有Name属性吗?在基类中,您应该包含在有界上下文的每个实体中呈现的属性. 在这里,我将详细描述这个主题:Domain object base class. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |