【发布时间】:2020-02-02 05:43:10
【问题描述】:
每当我调用databaseContext.SaveChanges() 时,在实体框架保存数据之前,我需要所有对象及其子类在CreatedOn 字段中填充DateTime.Now()。
详细信息:我有一个所有实体都继承自的 BaseEntity 类:
public class BaseEntity
{
[Key]
public virtual Guid Id{ get; set; }
public DateTime CreatedOn { get; set; }
}
只要保存了从上述BaseEntity 继承的实体,CreatedOn 属性就会被分配DateTime.Now。
这是一个可以做到这一点的基础存储库:
public abstract class BaseRepository<TEntity> : IBaseRepository<TEntity> where TEntity : BaseEntity
{
....
public virtual bool SaveChanges(TEntity entity)
{
if (entity.CreatedOn == DateTime.MinValue)
entity.CreatedOn = DateTime.Now;
else
entity.ModifiedOn = DateTime.Now;
return _databaseContext.SaveChanges() > 0;
}
}
这很好用,但问题是只有对象本身的CreatedOn 属性得到更新。那里的任何子类可能不会更新。
如何更改SaveChanges() 方法中的逻辑以更新所有子类并同时设置它们的CreatedOn 日期?
我将提供一个示例来更清楚地说明这一点:想象下面的 User 对象实例添加到 dbContext 并分配了新的 Profile,以及分配了新的 Role 类实例,然后SaveChanges() 被调用:
public class User: BaseEntity
{
[Key]
public virtual Guid Id { get; set; }
public UserRole Role { get; set; }
public ProfileDetails Profile { get; set; }
public DateTime CreatedOn { get; set; }
public Guid CreatedBy { get; set; }
}
确保将CreatedOn 日期分配给子user.Role 以及user.Profile 对象(这两个类也继承自BaseEntity)的最佳方法是什么?我想过使用反射来检查CreatedOn 字段的子对象属性,但所有循环都感觉不对。有没有更好的办法?
【问题讨论】:
标签: c# entity-framework inheritance entity-framework-6