我正在使用实体框架4.3和DbContext来更新我的分贝。我有一组用户,允许任何用户进行修改,然后更改保存。我的问题是,我发现调用SaveChanges()时意外更新了额外的记录。实体框架4.3 DbContext SaveChanges更新记录比预期更
例如,更新与PK用户= 5〜 '撤销' 状态也可用来产生与PK用户一个SQL UPDATE = 1个
SQL分析器跟踪:
(不期望THIS)
exec sp_executesql N'declare @p int
update [db].[Users]
set @p = 0
where (([UsersPk] = @0) and ([RowVersion] = @1))
select [RowVersion]
from [db].[Users]
where @@ROWCOUNT > 0 and [UsersPk] = @0',N'@0 int,@1 binary(8)',@0=1,@1=0x0000000000011BFD
(预期)
exec sp_executesql N'update [db].[Users]
set [AccessStatus] = @0
where (([UsersPk] = @1) and ([RowVersion] = @2))
select [RowVersion]
from [db].[Users]
where @@ROWCOUNT > 0 and [UsersPk] = @1',N'@0 varchar(10),@1 int,@2 binary(8)',@0='revoked',@1=5,@2=0x0000000000011C01
要调试这个我用这个
var mods = DbContext.ChangeTracker.Entries<User>().Where(u => u.State == EntityState.Modified);
Debug.Print(mods.Count().ToString());
得到返回1修改的条目数,但调用的SaveChanges()返回2,因为它确实应该为2项更新。
我不明白为什么生成第一个查询,因为这个用户的属性没有被更新 - 他们不应该无论如何。
我怀疑我在这里忽略了一些相当直接的东西,但无法弄清楚什么。任何建议不胜感激。
我们无法理解你在做什么与上下文 – Eranga 2012-02-29 01:07:58
我正在修改一个实体并调用SaveChanges()如上所述 – pilsdumps 2012-02-29 13:15:43