1

错误消息:“存储更新、插入或删除语句影响了意外数量的行 (0)。自加载实体以来,实体可能已被修改或删除。刷新 ObjectStateManager 条目。”

大家好,

我在 MVC 和 EF 中使用 SQL 紧凑型数据库创建了 Code First TPH(Table Per Hierarchy)。

这是类图/层次结构:

类图

Client 和 SalesRep 都继承了 BaseUser 类。密钥是“UserID”,它是用数据注释编码的[Key](我知道“ID”也应该设置它)

这就是我所在的位置:我可以用一些条目为数据库播种。当我尝试在播种方法中设置“用户ID”时,它似乎忽略了它,只是按数字顺序应用用户ID......(对我来说似乎没问题?)

此外,这是我的 DbContext

public class SiteDB:DbContext
{
    public DbSet<BaseUser> AllUsers { get; set; }//enable TPH
    public DbSet<SalesRep> SalesReps { get; set; }
    public DbSet<Client> Clients { get; set; }
}

下一个,

我为 Clients -> ClientsController 创建了一个具有强类型 Razor 视图的控制器。有了这个。我现在有一个客户的 CRUD。我可以毫无问题地创建新客户端,但是当我尝试编辑客户端条目时,我收到上述错误消息。

我确实注意到了一些有趣的事情,我单步执行了代码,并且错误发生在 db.SaveChanges();

当客户端被传回 ActionResult Edit 方法时,UserID=0!奇怪吗?我不确定这是一个错误还是导致此问题的实际问题。

用户 ID=0

感谢您对此提供的帮助。谢谢!

4

1 回答 1

0

要修改实体,您需要从数据库中获取它:当您在 Edit 操作中传回修改后的值时,您需要从db对象中检索实体,通过 ID 获取它,应用修改后的值并保存它。

这里有一个例子:

public ActionResult Edit(int id, MyModel model){
 using (SiteDBdb = new SiteDB()){
  Client cl = (from c in db.Clients where c.id == id select c).First();
  cl.MyProp = model.MyProp;
  ...
  db.SaveChanges();
 }
 ...
}
于 2011-10-17T07:02:02.590 回答