我有單元測試,我在每個測試方法之前創建和接種一個SQLCE4數據庫。單元測試拋出ObjectDisposedException與ObjectContext
在測試方法,如果我有這樣的查詢:
var maxGroupLevel = repository.Get<GroupLevel>().Max(g => g.Id);
它會拋出下面的異常:
System.ObjectDisposedException: The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.
Result StackTrace:
at System.Data.Objects.ObjectContext.EnsureConnection()
at System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)
at System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
at System.Linq.Enumerable.Single[TSource](IEnumerable`1 source)
at System.Data.Objects.ELinq.ObjectQueryProvider.<GetElementFunction>b__3[TResult](IEnumerable`1 sequence)
at System.Data.Objects.ELinq.ObjectQueryProvider.ExecuteSingle[TResult](IEnumerable`1 query, Expression queryRoot)
at System.Data.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute[S](Expression expression)
at System.Data.Entity.Internal.Linq.DbQueryProvider.Execute[TResult](Expression expression)
at System.Linq.Queryable.Max[TSource,TResult](IQueryable`1 source, Expression`1 selector)
但是,如果我把一個ToList()調用查詢它的工作原理:
var maxGroupLevel = repository.Get<GroupLevel>().ToList().Max(g => g.Id);
怎麼回事?另外,如果我將數據庫的創建/播種移動到構造函數而不是TestInitialize方法,並在TestInitialize中創建新的上下文,那麼它一切正常。但是,我不想這樣做,因爲我希望數據庫在每次測試之前處於已知狀態。
我們需要兩件事情 - 存儲庫類的代碼和測試代碼(實例化上下文和存儲庫的部分)。 – 2013-03-08 09:11:50
我有[此SSCCE]的確切問題(http://pastebin.com/apRns9mV) – Eregrith 2013-10-09 11:34:30