EF记录数据变更方法
EF记录数据变更方法
February 25, 2014
在使用SQLServer时,通常情况下使用SQLServer自带管理器可以查看到数据变更的记录。如果在程序用需要更灵活的记录这些信息,则可以通过EF的ObjectStateManager属性的相关方法实现。
ObjectStateManager.GetObjectStateEntries 方法
返回具有给定状态的对象或关系的 ObjectStateEntry 对象的集合。
命名空间: System.Data.Objects
程序集: System.Data.Entity(在 System.Data.Entity.dll 中)
语法:
public IEnumerable<ObjectStateEntry> GetObjectStateEntries(
EntityState state
)参数:
state 类型:System.Data.EntityState
用于筛选返回的 ObjectStateEntry 对象的 EntityState。
返回值:
类型:System.Collections.Generic.IEnumerable
具有给定 EntityState 的 ObjectStateEntry 对象的集合。
备注:
EntityState 是一个位字段,因此,通过对多个 EntityState 值执行按位或操作,在一次调用中即可检索多个状态的状态项。
例如我们需要获取修改过的记录,则
entities.ObjectStateManager.GetObjectStateEntries(EntityState.Modified)获取添加或删除的记录
entities.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Deleted)如果要记录某一个表的某一个字段的变更情况,则需要使用GetModifiedProperties方法:
var str = "propertyname"; //需要记录的字段名
foreach (var item in entities.ObjectStateManager.GetObjectStateEntries(EntityState.Modified))
{
var table = item.Entity as Table;
if (item.GetModifiedProperties().Contains(str))
{
var index = item.CurrentValues.GetOrdinal(str);
var newValue = item.CurrentValues.GetValue(index);
var oldValue = item.OriginalValues.GetValue(index);
if (!object.Equals(newValue, oldValue))
{
//记录
}
}
}最后更新于