实体框架对象真实更新 - 无重复

时间:2011-03-25 15:48:35

标签: entity-framework code-first sql-update

我尝试使用具有代码优先的实体框架4.1和SQL Server 2008更新数据库中的对象。我的对象的类具有int类型的ID字段。问题是当我更新我的对象并在我的DbContext上调用SaveChanges时,数据库会创建数据行的副本,而不是更新我已经拥有的那个。我不想要这个,我只想像旧式SQL命令UPDATE那样进行干净的更新。我该如何解决这个问题?

 Nation nation = (nationDB.Nations.Where(m => m.name == "France")).SingleOrDefault();

 if (nation != null)
 {
   Nation modNation = nationDB.Nations.Find(nation.ID);
   modNation.Level++;
 }

 nationDB.SaveChanges();

public class Nation
{
    public int ID { get; set; }
    public int name { get; set; }
    public int level { get; set; }
}

2 个答案:

答案 0 :(得分:3)

要更新它,您必须先从数据库中读取它,更改它,然后保存它。

如果您在代码中创建新实体,即使使用现有密钥,EF也会将其视为新实体。

答案 1 :(得分:1)

我认为ObjectStateManager已将您的对象注册为Added状态。尝试将其状态设置为Modified(通过调用GetObjectStateEntry(Object)并检查/修改State属性)。

相关问题