それはかなり自明です。私は別のクラスを持っていますそれらをサブジェクトとクラスルームと呼びましょう
public class Subject
{
public Classroom Class {get; set;}
}
私はステートレスファサードを使用しています。これは、オブジェクトを回復した直後にDbContextが破棄され、新しいオブジェクトを格納するために作成されることを意味します。ClassroomのIDはすでにDBにあるので、Classroomが新しいオブジェクトではないことを知っておくべきではありませんか?デバッガーを使用すると、SaveChangesメソッドを呼び出す直前のポイントまで追跡できます。Classroom.idはデータベースにあるものです。どうしたの?EFは、前のクラスルームとまったく同じプロパティを備えた新しいクラスルームを追加しますが、新しいPKを備えています。私はここで何が間違っているのですか?
これは、一般的なCRUD操作に使用されるコードです(これらは私のDbContextにあります)更新と削除の両方が正常に機能します。
public void Update(DbSet MySet, object Obj)
{
MySet.Attach(Obj);
var Entry = this.Entry(Obj);
Entry.State = EntityState.Modified;
this.SaveChanges();
}
public void Insert(DbSet MySet, object Obj)
{
MySet.Add(Obj);
this.SaveChanges();
}
public void Delete(DbSet MySet, object Obj)
{
MySet.Attach(Obj);
var Entry = this.Entry(Obj);
Entry.State = EntityState.Deleted;
this.SaveChanges();
}