Entity framework 有没有办法在EF中自动设置CreatedDate/LastModifiedDate列?
数据库中的每个表都有一个CreatedDate和LastModifiedDate列。EF中是否有方法分别在插入和更新操作期间自动设置这些列Entity framework 有没有办法在EF中自动设置CreatedDate/LastModifiedDate列?,entity-framework,Entity Framework,数据库中的每个表都有一个CreatedDate和LastModifiedDate列。EF中是否有方法分别在插入和更新操作期间自动设置这些列 我试图避免人们试图记住在应用程序代码中手动设置它们,因为这很容易出错。(不,我不想在每个表上都放置触发器。)如果使用通用存储库模式,有一个简单的解决方案。 您可以使用以下代码添加实体 public T Add(T entity) { typeof(T).GetField("CreatedDate").SetValue(entity,
我试图避免人们试图记住在应用程序代码中手动设置它们,因为这很容易出错。(不,我不想在每个表上都放置触发器。)如果使用通用存储库模式,有一个简单的解决方案。 您可以使用以下代码添加实体
public T Add(T entity)
{
typeof(T).GetField("CreatedDate").SetValue(entity, DateTime.Now);
return this.DbSet.Add(entity);
}
并更新实体,如下所示
public virtual void Edit(T entity)
{
typeof(T).GetField("LastModifiedDate").SetValue(entity, DateTime.Now);
this.Context.Edit(entity);
}
如果您使用通用存储库模式,那么有一个简单的解决方案。 您可以使用以下代码添加实体
public T Add(T entity)
{
typeof(T).GetField("CreatedDate").SetValue(entity, DateTime.Now);
return this.DbSet.Add(entity);
}
并更新实体,如下所示
public virtual void Edit(T entity)
{
typeof(T).GetField("LastModifiedDate").SetValue(entity, DateTime.Now);
this.Context.Edit(entity);
}
如果在每个表中都有
CreatedDate
和LastModifiedDate
,那么可能有一些抽象的BaseModel
,具有这两个属性。然后,您可以在上下文中重写SaveChanges
方法并设置以下属性:
private void SetOperationDates()
{
// Get added entries
IEnumerable<ObjectStateEntry> addedEntryCollection = Context
.ObjectContext
.ObjectStateManager
.GetObjectStateEntries(EntityState.Added)
.Where(m => m != null && m.Entity != null);
// Get modified entries
IEnumerable<ObjectStateEntry> modifiedEntryCollection = Context
.ObjectContext
.ObjectStateManager
.GetObjectStateEntries(EntityState.Modified)
.Where(m => m != null && m.Entity != null);
// Set CreatedDate of added entries
foreach (ObjectStateEntry entry in addedEntryCollection)
{
BaseModel addedEntity = entry.Entity as BaseModel;
if (addedEntity != null)
addedEntity.CreatedDate = DateTime.Now;
}
// Set LastModifiedDate of modified entries
foreach (ObjectStateEntry entry in modifiedEntryCollection)
{
BaseModel modifiedEntity = entry.Entity as BaseModel;
if (modifiedEntity != null)
modifiedEntity.LastModifiedDate = DateTime.Now;
}
}
public override int SaveChanges()
{
SetOperationDates();
return SaveChanges();
}
private void SetOperationDates()
{
//获取添加的条目
IEnumerable addedEntryCollection=上下文
.ObjectContext
.ObjectStateManager
.GetObjectStateEntries(EntityState.Add)
其中(m=>m!=null和&m.Entity!=null);
//获取修改的条目
IEnumerable modifiedEntryCollection=上下文
.ObjectContext
.ObjectStateManager
.GetObjectStateEntries(EntityState.Modified)
其中(m=>m!=null和&m.Entity!=null);
//设置已添加项的CreatedDate
foreach(addedEntryCollection中的ObjectStateEntry条目)
{
BaseModel AddIdentity=条目。实体作为BaseModel;
if(addedEntity!=null)
addedEntity.CreatedDate=DateTime.Now;
}
//设置已修改项的LastModifiedDate
foreach(modifiedEntryCollection中的ObjectStateEntry条目)
{
BaseModel modifiedEntity=entry.Entity作为BaseModel;
if(modifiedEntity!=null)
modifiedEntity.LastModifiedDate=DateTime.Now;
}
}
公共覆盖int SaveChanges()
{
SetOperationDates();
返回SaveChanges();
}
注意:如果每个表中都有
CreatedDate
和LastModifiedDate
,您还可以添加带有bool
参数的SaveChanges
方法的重载版本,以防您不想调用SetOperationDates
,然后可能会有一些抽象的BaseModel
,它具有这两个属性。然后,您可以在上下文中重写SaveChanges
方法并设置以下属性:
private void SetOperationDates()
{
// Get added entries
IEnumerable<ObjectStateEntry> addedEntryCollection = Context
.ObjectContext
.ObjectStateManager
.GetObjectStateEntries(EntityState.Added)
.Where(m => m != null && m.Entity != null);
// Get modified entries
IEnumerable<ObjectStateEntry> modifiedEntryCollection = Context
.ObjectContext
.ObjectStateManager
.GetObjectStateEntries(EntityState.Modified)
.Where(m => m != null && m.Entity != null);
// Set CreatedDate of added entries
foreach (ObjectStateEntry entry in addedEntryCollection)
{
BaseModel addedEntity = entry.Entity as BaseModel;
if (addedEntity != null)
addedEntity.CreatedDate = DateTime.Now;
}
// Set LastModifiedDate of modified entries
foreach (ObjectStateEntry entry in modifiedEntryCollection)
{
BaseModel modifiedEntity = entry.Entity as BaseModel;
if (modifiedEntity != null)
modifiedEntity.LastModifiedDate = DateTime.Now;
}
}
public override int SaveChanges()
{
SetOperationDates();
return SaveChanges();
}
private void SetOperationDates()
{
//获取添加的条目
IEnumerable addedEntryCollection=上下文
.ObjectContext
.ObjectStateManager
.GetObjectStateEntries(EntityState.Add)
其中(m=>m!=null和&m.Entity!=null);
//获取修改的条目
IEnumerable modifiedEntryCollection=上下文
.ObjectContext
.ObjectStateManager
.GetObjectStateEntries(EntityState.Modified)
其中(m=>m!=null和&m.Entity!=null);
//设置已添加项的CreatedDate
foreach(addedEntryCollection中的ObjectStateEntry条目)
{
BaseModel AddIdentity=条目。实体作为BaseModel;
if(addedEntity!=null)
addedEntity.CreatedDate=DateTime.Now;
}
//设置已修改项的LastModifiedDate
foreach(modifiedEntryCollection中的ObjectStateEntry条目)
{
BaseModel modifiedEntity=entry.Entity作为BaseModel;
if(modifiedEntity!=null)
modifiedEntity.LastModifiedDate=DateTime.Now;
}
}
公共覆盖int SaveChanges()
{
SetOperationDates();
返回SaveChanges();
}
注意:如果您不想调用
SetOperationDates
是否先使用代码?是否先使用代码,您还可以添加带有bool
参数的SaveChanges
方法的重载版本?