【发布时间】:2018-11-13 07:05:22
【问题描述】:
我的应用程序中的基础实体派生自基础实体,该基础实体使用 ef 核心代码优先方法。
基类
public abstract class BaseEntity<T> : IEntity<T>
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public T Id { get; set; }
object IEntity.Id { get { return Id; } set { } }
private DateTime? createdOn;
[DataType(DataType.DateTime)]
public DateTime CreatedOn { get => createdOn ?? DateTime.Now; set => createdOn = value; }
[DataType(DataType.DateTime)]
public DateTime? ModifiedOn { get; set; }
public bool IsDeleted { get; set; }
// Auto increment for all entities.
public int OrderId { get; set; }
}
还有一个实体
public class UserEntity : BaseEntity<int>
{
public string EmployeeId { get; set; }
public string FullName { get; set; }
public string Email { get; set; }
}
我可以在OnModelCreating 中的OrderId 属性上应用.ValueGeneratedOnAdd() 方法对于每个实体 但是,有没有办法为所有实体应用一般规则而无需自己重复? p>
【问题讨论】:
-
你不能在
OrderId上也使用[DatabaseGenerated(DatabaseGeneratedOption.Identity)]吗? -
已经有一个带有标识选项的主键列。所以不允许再有这个属性了。
-
与问题无关,但
IEntity知道Id是T所以IEntity.Id不需要返回object。 -
@sellotape 请参考此link 并查看实施段落了解详细信息..
-
@ibubi - 很公平;我应该意识到这是
IEntity.Id,而不是IEntity<T>.Id...