在基类中实现等价
本文关键字:实现 基类 | 更新日期: 2023-09-27 17:52:53
我使用的是ASP。. NET MVC和EntityFramework代码。
我正在尝试创建一个基类的所有对象,将保存到我的数据库(这里称为实体类)。
在基类中是否有实现等价的好方法?在我的实现中,我检查类型和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 <
- 名称/gh>
- 页面
- ID 身体
- 用户
- ID <
- 名称/gh>
因此,Page和Content表共享一个主键
- 没有必要实现公平,它不给任何值(既没有性能值,也没有可读性值)。
- 在你的比较中,你只依赖于引用相等性检查。您还应该检查ID是否相等。
- 你的GetHashCode()实现是次优的,你应该包括实体的类型。
- 你确定所有的实体都有Name属性吗?在基类中,应该包含在有界上下文的每个实体中呈现的属性。