MVC-Entity framework- 数据未提交到数据库

MVC-Entity framework- data not commited to database

我有以下代码在我的 MVC 程序中执行 CRUD 操作。

 if (ModelState.IsValid)
            {
                CustomerDal dal = new CustomerDal();

                dal.Customers.Add(obj);
                dal.Entry(obj).State = EntityState.Modified;//added this line to resolve issue but still no change
                dal.SaveChanges();
                return View("customer", obj);
            }
            else
            {
                return View("entercustomer",obj);
            }

和我的客户class

   public class CustomerDal : DbContext
    {
        public CustomerDal(): base("CustomerDal")
    {
    }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {

            base.OnModelCreating(modelBuilder);
            modelBuilder.Entity<Customer>().ToTable("tbCustomer");
        }
        public DbSet<Customer>Customers { get; set; }
    }
    }

客户class

public class Customer : DropCreateDatabaseIfModelChanges<CustomerDal>
    {
        [Required]
        [RegularExpression("^[A-Z]{3,3}[0-9]{4,4}$")]
        [Key]
        public string CustomerCode { get; set; }
        [Required]
        [StringLength(10)]
        public string CustomerName { get; set; }

    }

程序运行时出现以下错误。

Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. See http://go.microsoft.com/fwlink/?LinkId=472540 for information on understanding and handling optimistic concurrency exceptions.

table 中不存在任何记录。这是一个新创建的table。 当我检查元素时,我可以看到我之前尝试过的所有项目都存在于上下文中,但没有更新到数据库中。当我添加以前没有尝试过的新项目时,并发错误不会发生。但是数据不会更新到数据库。

注意:我使用的是 MVC5

soo...我对并发异常进行了大量练习,那里有一些主要错误原因:

1) 添加条目时,请确保您的模型构建器和数据库具有相同的自动增量值。如果 EF 有自动增量,但 db 没有,EF 不会在插入语句中传递 Id 值,但会期望它从 DBMS 返回。如果 EF 没有自动增量,但 db 有,它将在创建的语句中传递 ID,但 DBMS 不会期望它。您可以通过将数据库调用包装在事务中来超越这一点,从 IDENTITY INSERT 开始(具体查询取决于您的提供商,但大多数都有)并以 Transaction.Commit();.

结束

2) 修改条目时,请确保 ID 值和所有乐观并发标记已存在于数据库中(在一行中)。否则 EF 将创建一个 UPDATE 语句,执行它,注意到没有行受到影响,并抛出此错误。

请问您的 CustomerDal 是什么?奇怪的是数据没有更新到数据库。这是 Code First 应用程序吗?

我怀疑你没有包含连接字符串?

public class CustomerDal: DbContext
{
    public CustomerDal()
        : base("YourConnectionString")
    {
    }
    .....
}