Я использую Entity Framework 4.3 и DbContext для обновления моей базы данных. У меня есть коллекция пользователей, которая позволяет любому пользователю быть измененным, а затем сохранить изменения. Моя проблема в том, что я обнаружил, что дополнительная запись неожиданно обновляется при вызове SaveChanges ().
Например, обновление пользователя с pk = 5 до статуса «аннулировано» также генерирует обновление sql для пользователя с pk = 1
Трассировка SQL-профилировщика:
(НЕ ОЖИДАЯ ЭТОГО)
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 записи обновляются.
Я не могу понять, почему генерируется первый запрос, поскольку свойства этого пользователя не обновляются - ну, в любом случае, их не должно быть.
Я подозреваю, что упускаю что-то довольно простое здесь, но не могу понять что. Любые предложения с благодарностью.