2011-08-30 54 views
4

讓我們假設我有以下代碼:LINQ到實體:添加對象不保存更改

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對象始終爲空,因爲Context.TEModules爲空,即使我稱之爲「AddObject」的方法。 但是,如果我在AddObject之後調用SaveChanges,則在下一個查詢中,aux對象不爲null。問題是我不想經常調用SaveChanges,因爲這不是我添加對象的唯一代碼,如果我這樣做,性能會下降。

所以問題是:我必須在每次AddObject調用後調用SaveChanges,如果以後我需要知道該對象是否已經存在?

回答

4

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)); 
+0

那麼修改後的對象有什麼用?假設我搜索「Enumvalue」字段,並且它從數據庫返回一個對象。我修改了EnumValue,後來我進行了搜索以找到修改的對象。如果SaveChanges尚未被調用,它是否會再次返回空值?它沒有任何意義,因爲每次修改,插入或刪除任何對象時,我都必須調用SaveChanges ... – DarthRoman

相關問題