Die*_*iro 6 c# entity-framework-4 ef-code-first
我遇到了Entity Framework和Code First的问题.我有一个具有Timestamp属性的实体,我向数据库添加一条新记录,调用SaveChanges,一切正常.当我尝试删除刚刚添加的记录时,我收到以下消息:
存储更新,插入或删除语句会影响意外的行数(0).自实体加载后,实体可能已被修改或删除.刷新ObjectStateManager条目.
在我看来,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; }
}
Run Code Online (Sandbox Code Playgroud)
上下文:
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; }
}
Run Code Online (Sandbox Code Playgroud)
和代码:
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
Run Code Online (Sandbox Code Playgroud)
我发现该问题是 Entity Framework 4.0 中的一个已知错误,自 2010 年以来就存在,并将在下一版本中得到解决(希望在 4.5 中)。当我更新具有相关对象的对象时,EF 尝试更新所有关系,并且由于父级中没有任何更改,它会给我“0 行”消息。
希望它能帮助某人。
| 归档时间: |
|
| 查看次数: |
5707 次 |
| 最近记录: |