C#中Entity Framework常见报错汇总

2019-12-30 18:32:32丽君

异常类型:System.Data.Entity.Infrastructure.DbUpdateConcurrencyException

实体属性配置如上例所示。

操作代码:


        using (CustomDbContext db = new CustomDbContext())
        {
          User user = new User 
          {
            Id = 1,
            Email = "test@132.com",
          };
          DbEntityEntry<User> entry = db.Entry<User>(user);
          entry.State = EntityState.Unchanged;
          entry.Property(t => t.Email).IsModified = true;

          User user1 = new User
          {
            Id = 1,
            Email = "test@132.com",
          };
          DbEntityEntry<User> entry1 = db.Entry<User>(user1);
          entry1.State = EntityState.Unchanged;
          entry1.Property(t => t.Email).IsModified = true;

          int num = db.SaveChanges();
        }  

执行操作

C#,Entity,Framework,常见报错

涉及到两次修改操作,两次操作构造了两个实例,但是实例的属性Id有相同的值。

如果两次操作的是同一个实例,而不是不同的实例,那么不会抛出异常,代码如下:


        using (CustomDbContext db = new CustomDbContext())
        {
          User user = new User 
          {
            Id = 1,
            Email = "test@132.com",
          };
          DbEntityEntry<User> entry = db.Entry<User>(user);
          entry.State = EntityState.Unchanged;
          entry.Property(t => t.Email).IsModified = true;

          DbEntityEntry<User> entry1 = db.Entry<User>(user);
          entry1.State = EntityState.Unchanged;
          entry1.Property(t => t.Email).IsModified = true;

          int num = db.SaveChanges();
        }

 

3 未给主键赋值或赋给主键一个不存在的值,抛出异常

System.Data.Entity.Infrastructure.DbUpdateConcurrencyException

操作代码如下,其中Id=1这条语句被注掉,Id是主键:


      using (CustomDbContext db = new CustomDbContext())
        {
          User user = new User 
          {
            //Id = 1,
            Email = "test@132.com",
          };
          DbEntityEntry<User> entry = db.Entry<User>(user);
          entry.State = EntityState.Unchanged;
          entry.Property(t => t.Email).IsModified = true;
          int num = db.SaveChanges();
        }  

运行上述代码,抛出异常信息如下,注意异常类型居然是System.Data.Entity.Infrastructure.DbUpdateConcurrencyException,看上去像是并发问题,但实际却不是!

Message:

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.