假设我有以下代码:
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对象始终为null,因为Context.TEModules为空,即使我调用“ AddObject “方法。 但是,如果我在AddObject之后调用SaveChanges,那么在下一个查询中,aux对象不为null。问题是我不想经常调用SaveChanges,因为这不是我添加对象的唯一代码片段,如果我这样做,性能就会下降。
所以问题是:我是否必须在每次AddObject调用后调用SaveChanges,如果稍后我需要知道该对象是否已存在?
答案 0 :(得分:5)
要执行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));