2014-01-13 32 views
2

當我面對這種奇怪的行爲,有時,當我嘗試刷新了入門:的NullReferenceException調用DbContext.Entry

DbEntityEntry<BatchServer> ent = d.Entry(jobServer); 
//the ex is thrown at d.Entry 
ent.Reload(); 

EF拋出一個異常NullReferenceException。但無論是jobServer也不d(我的上下文的變量)爲空,如果我們看一看入堆棧跟蹤:

System.NullReferenceException: Object reference not set to an instance of an object. 
at System.Data.Objects.EntityEntry.DetectChangesInProperty(Int32 ordinal, Boolean detectOnlyComplexProperties, Boolean detectOnly) 
at System.Data.Objects.EntityEntry.DetectChangesInProperties(Boolean detectOnlyComplexProperties) 
at System.Data.Objects.ObjectStateManager.DetectChangesInScalarAndComplexProperties(IList`1 entries) 
at System.Data.Objects.ObjectStateManager.DetectChanges() 
at System.Data.Objects.ObjectContext.DetectChanges() 
at System.Data.Entity.Internal.InternalContext.DetectChanges(Boolean force) 
at System.Data.Entity.Internal.InternalContext.GetStateEntry(Object entity) 
at System.Data.Entity.Internal.InternalEntityEntry..ctor(InternalContext internalContext, Object entity) 
at System.Data.Entity.DbContext.Entry[TEntity](TEntity entity) 
at IEADPC.BatchRemoting.Monitor.ViewModel.MonitorViewModel.<>c__DisplayClass40.<>c__DisplayClass42.<RefreshAll>b__3d(BatchRemotingContexA first chance exception of type 'System.NullReferenceException' occurred in IEADPC.BatchRemoting.Monitor.dll 

我們看到有EF內一個例外。這個錯誤是100%重複性的,但只有在程序中做了很多工作之後。那麼這是一個已知的錯誤,如果EF或我做錯了什麼?

問候

更新:

只是befor我稱之爲我從上下文中的所有服務器:

DataAccessObject.ClientDataAccess.WorkOnDatabase(d => 
    { 
     var colzwei = new ObservableCollection<BatchServer>(d.BatchServers.ToList()); 
     foreach (var jobServer in colzwei) 
     { 
      DbEntityEntry<BatchServer> ent;         
      ent = d.Entry(jobServer); 
      ent.Reload(); 
      ... 
     } 
    } 

public void WorkOnDatabase(Action<BatchRemotingContext> databaseAction) 
    { 
     if (DbContext == null) 
     { 
      using (DbContext = ReturnDatabase()) 
      { 
       databaseAction.Invoke(DbContext); 
      } 
     } 
     else 
     { 
      databaseAction.Invoke(DbContext); 
     } 
    } 

這一工程以及在整個程序中,只是當我在我的程序中工作比它有時發生

+0

ent.Reload是否發生異常?是否爲空?也許jobServer不再在數據庫中? – tofutim

+0

什麼是d。你確定了嗎? – Rob

+0

@tofutim沒有例外發生在'd.Entry(...)'。 'ent.Reload();'不被執行。 @Robuust我做到了。我正在使用一個函數來確保我總是使用有效的連接。這在所有其他情況下都很有效。 – JPVenson

回答

0

確定原因是奇怪的,因爲錯誤的自我。

還有一個實體叫做:ServerBatch當我第一次添加它們時,一切正常。然後我編輯它們並將它們第二次添加到我的實體列表中。之後SaveChanges崩潰,因爲我嘗試添加一個PK實體到PK已經存在的列表。這個崩潰被處理,所以程序將繼續運行,並且在崩潰之後,Entry方法將失敗併產生該異常。

相關問題