3

私のアプリケーションでは、リストから監視可能なコレクションを作成しています。リストは私のデータベーステーブルのコレクションです。リストは正しい結果を表示しますが、監視可能なコレクションを作成すると、例外が発生し Object reference not set to an instance of an objectます。そして、これは、大規模なデータベースでアプリケーションを実行したときに時々発生しました。小規模なデータベースの場合、正常に動作します。

コード:

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)}

私は何を間違っていますか?事前にサンクス


編集:

上記は私のコードのほんの一部です。私の実際のコードでは、UnitOfWork と Repository Pattern を使用しています。問題をデバッグするために、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の場合はそうかもしれませんが、そうではありません。それを確認するために、リストにウォッチを追加しました。

4

1 に答える 1

0

このコードでは、dbまたはTablesnullです。

var list = db.Tables.ToList();

事前に次のことを確認してください。

if (db != null && ds.Tables != null)
{
var list = db.Tables.ToList();
}
于 2013-07-09T11:15:57.857 に答える