'Entity Framework Db.SaveChanges() not working?

Can u tell me what is the problem?

can u tell me what's the problem



Solution 1:[1]

Try to query your entity by Id, eg:

entity = this.repo.GetById(item.id);
entity.is_front = false;

if (dbSaveChanges() > 0)
{ 
   ....
}

Solution 2:[2]

Before going through my answer, you must check, if you are attaching the item as shown in excepted answer or check this code:.

if (dbStudentDetails != null && dbStudentDetails.Id != 0)
{
   // update scenario
    item.Id = dbStudentDetails.Id;
    _context.Entry(dbStudentDetails).CurrentValues.SetValues(item);
    _context.Entry(dbStudentDetails).State = EntityState.Modified;
}
else
{
    // create scenario
    _context.StudentDetails.Add(item);
}

await _context.SaveChangesAsync();

If above solution doesn't work, then check the below answer.

Saw a very wired issue, and thought to must answer this. as this can be a major issue if you have lots of constraints and indexes in your SQL.

db.SaveChanges() wasn't throwing any error, but not working (I have tried Exception or SqlException). This was not working because the Unique constraint was not defined properly while creating the Entity Models.

How you can Identified the issue:

  • I connected my SQL Server and opened the SQL Profiler.
  • Just before the db.SaveChanges(), I cleared all my profiler logs and ran the db.SaveChanges(). It logged the statement. I copied the script from the profiler and ran the script in SQL Server.
  • And bingo, I can see the actual error, which is being thrown at SQL Server side.

(images: have some hints, how you can get the execute statement from Profiler and run on sql server) enter image description here enter image description here

What you can do For Entity Framework Core:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Students>().HasIndex(p => new { p.RollNumber, p.PhoneNumber }).IsUnique(true).IsClustered(false).HasDatabaseName("IX_Students_Numbers");
}

What you can do For Entity Framework 6 and below:


using System.Data.Entity.ModelConfiguration;

internal partial class StudentsConfiguration : EntityTypeConfiguration<Students>
{
    public StudentsConfiguration()
    {
        HasIndex(p => new { p.RollNumber, p.PhoneNumber }).IsUnique(true).IsClustered(false).HasName("IX_Students_Numbers");
    }
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Iván Kollár
Solution 2 KushalSeth