从列表创建可观察集合时,对象引用未设置为对象的实例

本文关键字:设置 对象 实例 对象引用 创建 列表 观察 集合 | 更新日期: 2023-09-27 18:21:33

在我的应用程序中,我正在从列表中创建可观察的集合。列表是我的数据库表的集合。列表显示正确的结果,但当我创建可观察的集合时,它会将异常显示为CCD_ 1。当我用大型数据库运行应用程序时,这种情况有时会发生。对于小型数据库,它运行得很好。

代码:

var list = db.Contacts.ToList();
ObservableCollection collection = new ObservableCollection(list);

例外:

对象引用未设置为对象的实例

堆栈跟踪

 at System.Data.Linq.IdentityManager.StandardIdentityManager.InsertLookup(MetaType type, Object instance)
   at System.Data.Linq.CommonDataServices.InsertLookupCachedObject(MetaType type, Object instance)
   at System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReaderBase`1.InsertLookup(Int32 iMetaType, Object instance)
   at Read_Contact(ObjectMaterializer`1 )
   at System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader`2.MoveNext()
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
   at System.Linq.OrderedEnumerable`1.<GetEnumerator>d__0.MoveNext()
   at System.Collections.ObjectModel.ObservableCollection`1.CopyFrom(IEnumerable`1 collection)
   at System.Collections.ObjectModel.ObservableCollection`1..ctor(IEnumerable`1 collection)

目标站点

{System.Object InsertLookup(System.Data.Linq.Mapping.MetaType, System.Object)}

我做错了什么?提前Thanx


编辑:

以上只是我代码的一小部分。在实际的代码中,我使用UnitOfWork和Repository模式。为了调试这个问题,我尝试通过foreach循环打印实体的所有ID。

  foreach (var item in _uow.Contacts.Query(q => !q.ContactID.Equals(1)))
  {
     i = item.ContactID;
  }

但突然之间,在大约25534(每次我得到随机数字)之后,_uow.Contacts.Query(q => !q.ContactID.Equals(1)无法得到下一个元素。换句话说,Enumerator.MoveNext()不会执行。当然,如果下一个元素是null,这可能会发生,但事实并非如此。我已经在列表中添加了一个手表来确认它。

从列表创建可观察集合时,对象引用未设置为对象的实例

在此代码中,dbTables都是null

var list = db.Tables.ToList();

确保在之前检查

if (db != null && ds.Tables != null)
{
var list = db.Tables.ToList();
}