我有时会遇到这种奇怪的行为,当我尝试重新加载条目时:
DbEntityEntry<BatchServer> ent = d.Entry(jobServer);
//the ex is thrown at d.Entry
ent.Reload();
EF 抛出一个 NullReferenceException
异常。但是 jobServer
和 d
(我的上下文变量)都不是空的,如果我们看一下 StackTrace:
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 或我做错了什么,这是一个已知错误吗?
问候
更新:
就在我调用它之前,我从上下文中获取了所有服务器:
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);
}
}
这在整个程序中运行良好,只是当我在我的程序中工作时,它有时会发生
最佳答案
好吧,原因很奇怪,因为 bug 本身。
还有一个名为:ServerBatch
的实体,当我第一次添加它们时,一切正常。然后我编辑它们并将它们第二次添加到我的实体列表中。之后 SaveChanges
崩溃,因为我尝试将具有 PK 的实体添加到 PK 已存在的列表中。此崩溃已得到处理,因此程序将继续运行,并且在崩溃之后 Entry
方法将失败并产生该异常。
关于c# - 调用 DbContext.Entry 时出现 NullReferenceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21093421/