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")
{
}
.....
}
我有以下代码在我的 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")
{
}
.....
}