我正在尝试使用 LINQ to SQL 更新记录,但在某些情况下,值与原始值相同,然后 Enitty 框架也不需要创建更新查询。
var objForupdate = context.temp.FirstOrDefault();
if(objForupdate != null)
{
objForupdate.Name = "VJ"; // Original Value also "VJ"
}
// Create update query for above.
context.SaveChanges();
更新 了嘿史蒂文伍德
在这里,我的数据库有 20 个字段。有时某些数据与原始数据相同,然后实体框架也会为此创建更新查询。
如果数据行不处于脏状态,则很简单,则无需更新它。但是实体框架也为此创建了更新查询。只需使用配置文件工具检查执行 SaveChanges() 方法后在数据库服务器上执行的查询类型。
解决方案
使用以下功能检查实体对象是否更改。如果不是,那么它将从 EntityState.Modified 更改为 EntityState.Unchanged。
public static bool ChangeStateIfNotModified(this EntityObject entity, ObjectContext context)
{
if (entity.EntityState == EntityState.Modified)
{
ObjectStateEntry state = ontext.ObjectStateManager.GetObjectStateEntry(entity);
DbDataRecord orig = state.OriginalValues;
CurrentValueRecord curr = state.CurrentValues;
bool changed = false;
for (int i = 0; i < orig.FieldCount; ++i)
{
object origValue = orig.GetValue(i);
object curValue = curr.GetValue(i);
if (!origValue.Equals(curValue) && (!(origValue is byte[]) || !((byte[])origValue).SequenceEqual((byte[])curValue)))
{
changed = true;
break;
}
}
if (!changed)
{
state.ChangeState(EntityState.Unchanged);
}
return !changed;
}
return false;
}