如果我调用保存更改,我只能检索对象集的元素

本文关键字:对象 元素 检索 调用 保存更改 如果 | 更新日期: 2023-09-27 18:32:26

我有以下代码:

context.MyEntities.AddObject(new Entity() { Id = 1 });
var entity = context.MyEntities.Where(e => e.Id == 1).FirstOrDefault();

还没有调用保存更改,所以我正在尝试检索我添加的对象,但entity为空。为什么?

如果我调用保存更改,我只能检索对象集的元素

ObjectContext.EntitySet 只会为我们获取带有 EntityKeys 的实体。 对于新插入的实体,在调用 SaveChanges() 之前,它们只有一个临时实体键。 有关详细信息,请参阅使用实体键(实体框架)中的实体键和添加的对象部分。

如果要在将实体保存到数据库之前获取实体,请考虑使用上下文。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();