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

时间:2012-04-25 19:48:03

标签: c# linq linq-to-entities

我有以下代码:

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

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

2 个答案:

答案 0 :(得分:3)

ObjectContext.EntitySet将仅为我们获取具有EntityKeys的实体。对于新插入的实体,它们只有一个临时实体键,直到调用SaveChanges()。有关详细信息,请参阅使用实体密钥(实体框架)中的Entity Keys and Added Objects部分。

如果要在将实体保存到数据库之前获取实体,请考虑使用context.ObjectStateManager.GetObjectStateEntries(...)方法。使用此方法,我们可以在调用.SaveChanges()之前获取所有已添加/已修改/已删除的实体状态条目和实体。

答案 1 :(得分:0)

解决!

随着Randolf的回答,我达到了以下解决方案:

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();