我们所有的数据库表都有UpdateUserID和UpdateTS。如果我的实体有变化,我想设置这个。有没有办法可以有条件地在现场进行更新?
如果我在代码中手动设置UpdateTS,那么它将显示我的实体已更改,并将始终更新对象。
发布于 2010-01-20 09:46:15
您应该能够处理SavingChanges事件(example here)并执行@sander概述的逻辑
发布于 2012-10-29 06:04:51
下面是另外两个想法的实现,注意事项如下
在调用SaveChanges()之前,
EntityState.Unmodified,并且不会更新上次修改的时间戳。代码
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();
}发布于 2010-01-20 07:43:11
在调用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;
}
}
}我可以很容易地调用这段代码,因为我已经将ObjectContext包装在一个存储库类中。如果您只使用它,您可以连接ObjectContext.SavingChanges事件来做类似的事情。
https://stackoverflow.com/questions/2097947
复制相似问题