我们所有的数据库表都有UpdateUserID和UpdateTS.如果我的实体有变化,我想要这套.有没有办法可以有条件地在现场进行此更新?
如果我在代码中手动设置UpdateTS,那么它将说明我的实体已更改并将始终更新该对象.
我在调用之前调用此扩展方法context.SaveChanges()
:
public static void SetLastModified(this ObjectContext context, DateTime dateTime)
{
DateTime now = DateTime.UtcNow;
foreach (ObjectStateEntry entry in context.ObjectStateManager.GetObjectStateEntries(EntityState.Modified))
{
if (!entry.IsRelationship)
{
IHasLastModified lastModified = entry.Entity as IHasLastModified;
if (lastModified != null)
lastModified.LastModified = now;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我可以轻松地调用此代码,因为我将ObjectContext包装在存储库类中.如果您正在使用它,您可以将ObjectContext.SavingChanges
事件挂钩以执行类似的操作.
以下是其他两个想法的实现,并考虑以下因素
EntityState.Unmodified
,并且不会更新上次修改的时间戳.EntityState.Added
)代码
public interface IHasLastModified
{
DateTime? LastModified { get; set; }
}
public class MyClass : IHasLastModified
{
public virtual int Id { get; set; }
public virtual string SomeOtherProperty { get; set; }
public virtual DateTime? LastModified { get; set; }
}
public class MyContext : DbContext
{
public override int SaveChanges()
{
DateTime now = DateTime.UtcNow;
foreach (ObjectStateEntry entry in (this as IObjectContextAdapter).ObjectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified))
{
if (!entry.IsRelationship)
{
IHasLastModified lastModified = entry.Entity as IHasLastModified;
if (lastModified != null)
lastModified.LastModified = now;
}
}
return base.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8196 次 |
最近记录: |