我刚刚阅读了有关通用实体基类的文章。简单地说,如果我没记错的话,后面的主要思想是在一个接口中收集所有通用的,非实体专用的字段,而不是在主要实体中实现它。这将是TL:DR;让我们看一些代码。
这是基础实体接口,是对另一个接口的通用实现
public interface IEntity : IModifiableEntity
{
object Id { get; set; }
DateTime CreatedDate { get; set; }
DateTime? ModifiedDate { get; set; }
string CreatedBy { get; set; }
string ModifiedBy { get; set; }
byte[] Version { get; set; }
}
public interface IEntity<T> : IEntity
{
new T Id { get; set; }
}
这是它在抽象类中的实现
public abstract class Entity<T> : IEntity<T>
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public T Id { get; set; }
object IEntity.Id
{
get { return this.Id; }
}
public string Name { get; set; }
private DateTime? createdDate;
[DataType(DataType.DateTime)]
public DateTime CreatedDate
{
get { return createdDate ?? DateTime.UtcNow; }
set { createdDate = value; }
}
[DataType(DataType.DateTime)]
public DateTime? ModifiedDate { get; set; }
public string CreatedBy { get; set; }
public string ModifiedBy { get; set; }
[Timestamp]
public byte[] Version { get; set; }
}
似乎很清楚也很容易理解,但是关于Id的一点。 我的问题是(是的,最后)
为什么在IEntity和IEntity接口中都有两个不同的Id属性?
什么是新的关键字做什么呢?这是怎么回事?:O
相关分类