我在使用 Entity Framework 和代码优先时遇到问题。
我有一个带有Timestamp属性的实体,并向数据库添加了一条新记录,调用SaveChanges,一切都OK。
当我尝试删除刚刚添加的记录时,收到以下消息:



在我看来,EF并不知道该新记录存在于数据库中,尽管事实已经存在。
有时,即使我尝试更新另一条记录,也会收到相同的消息,但是如果我尝试删除另一条记录,则它会起作用。

有谁知道为什么会这样吗?

提前致谢,
地亚哥

编辑
我已经汇编了一些代码,以使其更容易理解我的问题:

我有两个简单的实体:

public class Entidade1
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ID { get; set; }

    public string Descricao { get; set; }

    [Timestamp]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public byte[] RecTS { get; set; }
}

public class Entidade2
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ID { get; set; }

    public string Descricao { get; set; }

    [Timestamp]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public byte[] RecTS { get; set; }

    public virtual Entidade1 Entidade1 { get; set; }
}

上下文:
public class DB : DbContext
{
    public DB() : base("DB")
    {
        this.Configuration.AutoDetectChangesEnabled = true;
        this.Configuration.LazyLoadingEnabled = true;
        this.Configuration.ProxyCreationEnabled = true;
    }

    public DbSet<Entidade1> Entidade1 { get; set; }
    public DbSet<Entidade2> Entidade2 { get; set; }
}

和代码:

var item = new Entidade1();
        item.Descricao = "teste";

        var db = new DB();

        db.Set(typeof(Entidade1)).Add(item);

        db.SaveChanges();

        var item2 = new Entidade2();

        item2.Descricao = "teste 2";
        item2.Entidade1 = item;

        db.Set(typeof (Entidade2)).Add(item2);

        db.SaveChanges();

        var q = (from c in db.Entidade1
                 where c.Descricao == "teste"
                 select c).FirstOrDefault();

        db.Set(typeof(Entidade1)).Remove(q);

        db.SaveChanges();

        var q2 = (from c in db.Entidade2
                  where c.Descricao == "teste 2"
                  select c).FirstOrDefault();

        db.Set(typeof (Entidade2)).Remove(q2);

        db.SaveChanges(); // Here I got the error

最佳答案

我发现问题是Entity Framework 4.0中的一个已知错误,该问题自2010年以来出现,并将在下一个版本中解决(希望在4.5中解决)。
当我更新具有相关对象的对象时,EF会尝试更新所有关系,并且由于 parent 中的任何内容都没有变化,它将给我“0行”消息。

希望它可以帮助某人。

关于c# - Entity Framework 代码优先DbUpdateConcurrencyException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10838624/

10-12 12:45
查看更多