次のコードがあります。
context.MyEntities.AddObject(new Entity() { Id = 1 });
var entity = context.MyEntities.Where(e => e.Id == 1).FirstOrDefault();
変更の保存をまだ呼び出していないので、追加したオブジェクトを取得しようとしていますが、entity
null です。なんで?
次のコードがあります。
context.MyEntities.AddObject(new Entity() { Id = 1 });
var entity = context.MyEntities.Where(e => e.Id == 1).FirstOrDefault();
変更の保存をまだ呼び出していないので、追加したオブジェクトを取得しようとしていますが、entity
null です。なんで?
ObjectContext.EntitySet は、EntityKeys を持つエンティティのみを取得します。新しく挿入されたエンティティの場合、SaveChanges() が呼び出されるまで一時エンティティ キーしかありません。詳細については、エンティティ キーの操作 (エンティティ フレームワーク) のエンティティ キーと追加されたオブジェクトのセクションを参照してください。
データベースに保存する前にエンティティを取得したい場合は、context.ObjectStateManager.GetObjectStateEntries(…) メソッドの使用を検討してください。このメソッドを使用すると、.SaveChanges() が呼び出される前に、追加/変更/削除されたすべてのエンティティ状態エントリとエンティティを取得できます。
解決しました!
ランドルフの答えにより、次の解決策に到達します。
context.MyEntities.AddObject(new MyEntity() { Id = 1 });
var entity = this.context
.ObjectStateManager
.GetObjectStateEntries(System.Data.EntityState.Added)
.Select(e => e.Entity)
.OfType<MyEntity>()
.Where(e => e.Id == 1)
.FirstOrDefault();