Entity Framework と Code First に問題があります。Timestamp プロパティを持つエンティティがあり、データベースに新しいレコードを追加し、SaveChanges を呼び出すと、すべて問題ありません。追加したばかりのレコードを削除しようとすると、次のメッセージが表示されます。
Store update、insert、または delete ステートメントが予期しない数の行 (0) に影響を与えました。エンティティが読み込まれた後に、エンティティが変更または削除された可能性があります。ObjectStateManager エントリを更新します。
EF は、この新しいレコードがデータベースに存在するという事実にもかかわらず、データベースに存在することを知らないようです。別のレコードを更新しようとしても同じメッセージが表示されることがありますが、別のレコードを削除しようとすると機能します。
なぜこれが起こっているのか誰にも分かりますか?
前もって感謝します、ディエゴ
編集 問題を理解しやすくするために、いくつかのコードを組み立てました。
2 つの単純なエンティティがあります。
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