私はEFでいくつかのテストを行っており、ObjectContext.SavingChangesにフックを取得しようとしていました。コンテキスト内のセットにオブジェクトを直接追加すると、すべてが機能します。しかし、エンティティnavプロパティを介してそれらを追加すると、イベントに表示されません。
より明確にするために例を示します。これは、SavingChangesイベントに登録されているメソッドです。
void SavingChanges(object sender, System.EventArgs e)
{ var oc = (ObjectContext)sender;
foreach (var entity in oc.ObjectStateManager
.GetObjectStateEntries(EntityState.Added | EntityState.Deleted | EntityState.Unchanged | EntityState.Modified))
Debug.WriteLine(entity);
}
そして、これは私がコンテキストに何かを追加する方法です。
var w1 = new Workspace()
{
Name = "teste1",
};
var w2 = new Workspace()
{
Name = "teste2"
};
var w3 = new Workspace()
{
Name = "teste3"
};
var w4 = new Workspace()
{
Name = "teste4"
};
//this shows up in the event
context.Workspaces.Add(w1);
//these do NOT show up on the event
w1.Children.Add(w2);
w1.Children.Add(w3);
w1.Children.Add(w4);
context.SaveChanges();
SaveChangesが呼び出されたときに追加されたすべてのエンティティを取得する方法はありますか?それらは私のデータベースに永続化されているので、いつ発生するのか知りたいです。
ありがとう!
編集:私はCTP4でEF4を使用しています。
edit2:これは私のPOCOです。
public class Workspace
{
public virtual int ID { get; set; }
public virtual string Name { get; set; }
public virtual ICollection<Workspace> Children{ get;set;}
public virtual Workspace Parent { get; set; }
}