链接到实体:添加一个对象而不保存更改



假设我有以下代码:

TEModule teModule = Context.TEModules.Where(module => module.EnumValue.Equals(text.ModuleName)).FirstOrDefault();
if (teModule == null)
{
     teModule = new TEModule();
     teModule.EnumValue = text.ModuleName;
     Context.TEModules.AddObject(teModule);
     //Context.SaveChanges();
     TEModule aux = Context.TEModules.Where(module => module.EnumValue.Equals(teModule.ModuleName)).FirstOrDefault();
}

我的问题是,如果我保持"SaveChanges"注释,那么在下一个查询aux对象总是空的,因为上下文。temmodules是空的,即使我调用"AddObject"方法。但是,如果我在AddObject之后调用SaveChanges,那么在下一个查询中aux对象不为空。问题是我不想经常调用SaveChanges,因为这不是我添加对象的唯一代码段,如果我这样做,性能会下降。

所以问题是:我是否必须在每次AddObject调用后调用SaveChanges,如果以后我需要知道对象是否已经存在?

linq-to-entities查询的目的是执行,并且执行是在数据库中执行的,所以如果你没有保存实体,它的数据库表示就不存在。

如果您需要查找本地存储的实体(尚未持久化),则必须查询ObjectStateManager

var entity = Context.ObjectStateManager.GetObjectStateEntries(EntitiState.Added)
                                       .Where(e => !e.IsRelationship)
                                       .Select(e => e.Entity)
                                       .OfType<TEModule>()
                                       .FirstOrDefault(m => m.EnumValue.Equals(teModule.ModuleName));

相关内容

  • 没有找到相关文章

最新更新