我有一个基类,如下所示。我的所有实体都继承自
public abstract Entity
{
public DataTime CreationDate{get;set;}
public DataTime ModifiedDate{get;set;}
}
我想在将新实体添加到数据库时设置CreationDate
。
通过覆盖SaveChanges()
方法并检查EntityState
处于Modified
状态我可以设置ModifiedDate
。
问题是我无法通过检查EntityState
来确定它是否是新实体,因为新实体和其他已加载实体处于Added
状态。
那么有没有办法区分新实体?
提前谢谢。答案 0 :(得分:1)
加载的实体始终处于Unchanged
状态。 Added
状态中新添加的实体,Modified
状态中的实体已更改,Deleted
状态中已删除实体。如果您发现任何其他行为,您做错了或使用EF不正确。顺便说一句。除非您的创建过程花费很长时间,否则可以通过以下方式设置CreationDate
:
public Entity()
{
CreationDate = DateTime.Now;
}
答案 1 :(得分:0)
我通过浏览ChangeTracker.Entries()
中的项目并将当前日期/时间分配给CreationDate-Property为null的创建日期来解决这个问题。示例:
public override int SaveChanges()
{
DateTime saveTime = DateTime.Now;
foreach (var entry in this.ChangeTracker.Entries())
{
if (entry.Entity is Entity)
{
if (entry.Property("CreationDate").CurrentValue == null)
entry.Property("CreationDate").CurrentValue = saveTime;
entry.Property("ModifiedDate").CurrentValue = saveTime;
}
}
return base.SaveChanges();
}