Solution for: Store update, insert, or delete statement affected an unexpected number of rows (0)
Solution 1
Solution:
try {
context.SaveChanges();
} catch (OptimisticConcurrencyException) {
context.Refresh(RefreshMode.ClientWins, db.Articles);
context.SaveChanges();
}
Solution 2
Its better you update your save method like this..... In case you calling savechange()
method of entity context after every addobject and deleteobject or modification :
public void Save(object entity)
{
using (var transaction = Connection.BeginTransaction())
{
try
{
SaveChanges();
transaction.Commit();
}
catch (OptimisticConcurrencyException)
{
if (ObjectStateManager.GetObjectStateEntry(entity).State == EntityState.Deleted || ObjectStateManager.GetObjectStateEntry(entity).State == EntityState.Modified)
this.Refresh(RefreshMode.StoreWins, entity);
else if (ObjectStateManager.GetObjectStateEntry(entity).State == EntityState.Added)
Detach(entity);
AcceptAllChanges();
transaction.Commit();
}
}
}
Solution 3
It's because you have SET NOCOUNT ON
.
The EF SQL Statement that it generates ALWAYS adds a clause of where @@ROWCOUNT > 0 and [ID] = scope_identity()
(for example).
Notice the where @@ROWCOUNT > 0
clause. Take off your SET NOCOUNT ON
statement and it should work.
Solution 4
In my case, need to set DatabaseGenerated Attribute when Custom Code First Conventions
public class Car
{
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Id { get; set; }
public string Model { get; set; }
public DateTime Registered { get; set; }
}
or
Switching off Identity for Numeric Primary Keys The following example sets the DepartmentID property to System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.None to indicate that the value will not be generated by the database.
modelBuilder.Entity<Department>().Property(t => t.DepartmentID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
see https://docs.microsoft.com/zh-tw/ef/ef6/modeling/code-first/conventions/custom
and https://docs.microsoft.com/zh-tw/ef/ef6/modeling/code-first/fluent/types-and-properties
Solution 5
I had the same problem, this error message is a rather mystifying one. The answer from webtrifusion helped me. See Entity Framework: "Store update, insert, or delete statement affected an unexpected number of rows (0)."
It turns out I forgot to add "Id:0" in the JSON on the client side.
Comments
-
nosbor almost 4 years
I found a solution for people who get an exception:
Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. Refresh ObjectStateManager entries.
But, anyway I have question.
I read topic: Entity Framework: "Store update, insert, or delete statement affected an unexpected number of rows (0)." To VMAtm, Robert Harvey
In my case I had for example table articles:
Articles ------------ article_id title date_cr date_mod deleted
And I had trigger:
create trigger articles_instead_of_insert on articles instead of insert as SET NOCOUNT ON; insert into articles( article_id, title, date_cr, date_mod, deleted ) select user_id, title, isnull(date_cr, {fn NOW()}), isnull(date_mod, {fn NOW()}), isnull(deleted, 0) from inserted; go
When I delete this trigger then I dont get this exception. So this trigger is problem. And now I have a question - Why? Should I do something?