I want to update a line in EF:
Case newCase = new Case(...); dbContext.Entry(newCase).State = EntityState.Modified; dbContext.SaveChanges();
When upgrading, I have this message:
It is expected that working with the database will affect 1 row (s), but will actually affect 0 row (s). Data may be modified or deleted as it is uploaded.
There is no concurrency since I use db on my machine.
If I go to the Sql profiler to see the completed query, this condition is:
WHERE [Id] = @ p0 AND [RowVersion] = @ p14;
in this condition, @ p0 is = 1, and @ p14 is NULL, just like the record I want to change. But if I manually ran this request on Sql Server after deleting part of the RowVersion request, it will succeed by updating 1 row.
What could be the problem and how can I solve it?
EDIT:
I tried to select an entry just before updating it, but the error is the same:
IEnumerable<Case> cases = from c in dbContext.Cases where c.Id.ToString() == "1" select c; Case cs = cases.SingleOrDefault(); dbContext.Entry(cs).State = EntityState.Modified; dbContext.SaveChanges();
Here is the complete error:
An exception of type "Microsoft.Data.Entity.DbUpdateConcurrencyException" occurred in EntityFramework.Core.dll, but was not processed in the user code
Additional information: It is expected that working with the database will affect 1 row (s), but in fact it affected 0 rows (rows). Data can be changed or deleted as objects are loaded. See http://go.microsoft.com/fwlink/?LinkId=527962 for information on understanding and handling optimistic concurrency exceptions.
And here is the request from Sql Profiler:
exec sp_executesql N'SET NOCOUNT OFF;
UPDATE [Case] SET [Closed] = @ p1, [Comment] = @ p2, [ContactComment] = @ p3, [ContactId] = @ p4, [CreatedBy] = @ p5, [CreatedDateTime] = @ p6, [ Description] = @ p7, [Email] = @ p8, [LastModifiedBy] = @ p9, [LastModifiedDateTime] = @ p10, [OpenedDateTime] = @ p11, [Phone] = @ p12, [RowVersion] = @ p13, [SlaConsumedTime ] = @ p15, [SlaSuspended] = @ p16, [SlaTotalTime] = @ p17, [Status] = @ p18, [Title] = @ p19 WHERE [Id] = @ p0 AND [RowVersion] = @ p14;
SELECT @@ ROWCOUNT; ', N' @ p0 int, @ p1 bits, @ p2 nvarchar (max), @ p3 nvarchar (max), @ p4 int, @ p5 int, @ p6 datetime2 (7), @ p7 nvarchar (4000), @ p8 nvarchar (4000), @ p9 int, @ p10 datetime2 (7), @ p11 datetime2 (7), @ p12 nvarchar (max), @ p13 varbinary (max), @ p14 varbinary (max), @ p15 time (7) , @ p16 bit, @ p17 time (7), @ p18 int, @ p19 nvarchar (4000) ', @ p0 = 1, @ p1 = 0, @ p2 = NULL, @ p3 = NULL, @ p4 = 0, @ p5 = 1, @ p6 = '2015-09-23 09: 07: 55.7041023', @ p7 = N'y ', @ p8 = N' t@f.f ', @ p9 = 1, @ p10 =' 2015 - 09-23 09: 50: 02.9934006 ', @ p11 =' 2015-09-23 09: 07: 55.6796028 ', @ p12 = NULL, @ p13 = NULL, @ p14 = NULL, @ p15 = '00: 00: 00 ', @ p16 = 0, @ p17 = '00: 00: 00', @ p18 = 0, @ p19 = n'y '