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);
}
}
這一工程以及在整個程序中,只是當我在我的程序中工作比它有時發生
ent.Reload是否發生異常?是否爲空?也許jobServer不再在數據庫中? – tofutim
什麼是d。你確定了嗎? – Rob
@tofutim沒有例外發生在'd.Entry(...)'。 'ent.Reload();'不被執行。 @Robuust我做到了。我正在使用一個函數來確保我總是使用有效的連接。這在所有其他情況下都很有效。 – JPVenson