2013-10-25 67 views
4

我正在按照以下教程快速學習代碼。 Code First to a New Database虛擬列表<T>:「函數評估需要所有線程運行」

我已經完成,直到教程的第4步:當我嘗試運行我的代碼時出現問題。我遇到以下情況除外,在下面的代碼...

foreach (var item in query) 
    { 
     Console.WriteLine(item.Name); 
    } 
    {"Exception has been thrown by the target of an invocation."} 

與內部異常

{"Access is denied: 'CodeFastNewDatabase.Program+Blog'.":""} 

當我嘗試檢查數據庫變量屬性的很多人有調試錯誤並稱「函數評估需要所有線程運行「 代碼在我的本地數據庫中創建數據庫,並插入值。

這個問題我可以解決,如果我刪除類的博客併發布虛擬說明符的屬性

public virtual List<Post> Posts { get; set; } 
    public virtual Blog Blog { get; set; } 

我面對我的其他項目同樣的異常也是如此。很多的屬性都出現了「功能評估需要所有的線程來運行」

我與實體框架工作6.0

編輯:

博客是的DbContext對象的屬性,我已經初始化程序類的主要功能。然後在上下文中添加博客,然後保存它。創建/更新數據庫並插入我的給定值。該代碼與示例鏈接中的代碼相同。

[堆棧跟蹤] 這是我捕獲的堆棧跟蹤。

at System.Environment.GetStackTrace(Exception e, Boolean needFileInfo) 
    at System.Environment.get_StackTrace() 
    at CodeFastNewDatabase.Program.Main(String[] args) in f:\Dropbox\Projects\visual studio 2012\Projects\CodeFastNewDatabase\CodeFastNewDatabase\Program.cs:line 32 
    at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 
    at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 
    at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
    at System.Threading.ThreadHelper.ThreadStart_Context(Object state) 
    at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
    at System.Threading.ThreadHelper.ThreadStart() 

這裏是兩個例外堆棧跟蹤(外部和內部)

at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) 
    at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) 
    at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) 
    at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters) 
    at System.Data.Entity.Core.Common.Internal.Materialization.Translator.TranslateColumnMap(Translator translator, Type elementType, ColumnMap columnMap, MetadataWorkspace workspace, SpanIndex spanIndex, MergeOption mergeOption, Boolean streaming, Boolean valueLayer) 
    at System.Data.Entity.Core.Objects.Internal.ObjectQueryExecutionPlanFactory.Prepare(ObjectContext context, DbQueryCommandTree tree, Type elementType, MergeOption mergeOption, Boolean streaming, Span span, IEnumerable`1 compiledQueryParameters, AliasGenerator aliasGenerator) 
    at System.Data.Entity.Core.Objects.ELinq.ELinqQueryState.GetExecutionPlan(Nullable`1 forMergeOption) 
    at System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClassb.<GetResults>b__a() 
    at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess) 
    at System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClassb.<GetResults>b__9() 
    at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation) 
    at System.Data.Entity.Core.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption) 
    at System.Data.Entity.Core.Objects.ObjectQuery`1.<System.Collections.Generic.IEnumerable<T>.GetEnumerator>b__0() 
    at System.Lazy`1.CreateValue() 
    at System.Lazy`1.LazyInitValue() 
    at System.Lazy`1.get_Value() 
    at System.Data.Entity.Internal.LazyEnumerator`1.MoveNext() 
    at CodeFastNewDatabase.Program.Main(String[] args) in f:\Dropbox\Projects\visual studio 2012\Projects\CodeFastNewDatabase\CodeFastNewDatabase\Program.cs:line 33 
    at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 
    at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 
    at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
    at System.Threading.ThreadHelper.ThreadStart_Context(Object state) 
    at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
    at System.Threading.ThreadHelper.ThreadStart() 

內部異常堆棧跟蹤

at System.Reflection.Emit.TypeBuilder.TermCreateClass(RuntimeModule module, Int32 tk, ObjectHandleOnStack type) 
    at System.Reflection.Emit.TypeBuilder.CreateTypeNoLock() 
    at System.Reflection.Emit.TypeBuilder.CreateType() 
    at System.Data.Entity.Core.Objects.Internal.EntityProxyFactory.ProxyTypeBuilder.CreateType(ModuleBuilder moduleBuilder) 
    at System.Data.Entity.Core.Objects.Internal.EntityProxyFactory.BuildType(ModuleBuilder moduleBuilder, ClrEntityType ospaceEntityType, MetadataWorkspace workspace) 
    at System.Data.Entity.Core.Objects.Internal.EntityProxyFactory.TryCreateProxyType(EntityType ospaceEntityType, MetadataWorkspace workspace) 
    at System.Data.Entity.Core.Objects.Internal.EntityProxyFactory.GetProxyType(ClrEntityType ospaceEntityType, MetadataWorkspace workspace) 
    at System.Data.Entity.Core.Common.Internal.Materialization.Translator.TranslatorVisitor.Visit(EntityColumnMap columnMap, TranslatorArg arg) 
    at System.Data.Entity.Core.Query.InternalTrees.EntityColumnMap.Accept[TResultType,TArgType](ColumnMapVisitorWithResults`2 visitor, TArgType arg) 
    at System.Data.Entity.Core.Common.Internal.Materialization.Translator.TranslatorVisitor.ProcessCollectionColumnMap(CollectionColumnMap columnMap, TranslatorArg arg, ColumnMap discriminatorColumnMap, Object discriminatorValue) 
    at System.Data.Entity.Core.Common.Internal.Materialization.Translator.TranslatorVisitor.ProcessCollectionColumnMap(CollectionColumnMap columnMap, TranslatorArg arg) 
    at System.Data.Entity.Core.Common.Internal.Materialization.Translator.TranslatorVisitor.Visit(SimpleCollectionColumnMap columnMap, TranslatorArg arg) 
    at System.Data.Entity.Core.Query.InternalTrees.SimpleCollectionColumnMap.Accept[TResultType,TArgType](ColumnMapVisitorWithResults`2 visitor, TArgType arg) 
    at System.Data.Entity.Core.Common.Internal.Materialization.Translator.TranslateColumnMap[T](ColumnMap columnMap, MetadataWorkspace workspace, SpanIndex spanIndex, MergeOption mergeOption, Boolean streaming, Boolean valueLayer) 
+0

你是怎麼聲明你的Blog類型的?你能發佈完整的堆棧跟蹤嗎? –

+0

我已經用堆棧跟蹤更新了問題。代碼在我提供的示例鏈接中充分說明。 http://msdn.microsoft.com/en-us/data/jj193542.aspx – spyronum

+0

這不是一個有用的堆棧跟蹤 - 它只是顯示你調用'Environment.StackTrace',看它的外觀。這個例外應該已經有了完整的細節。 –

回答

2

異常消息表明您已經使用BlogPost嵌套內Program類,而狀態指示:

下面Program.cs中Program類定義添加以下兩類。

就我個人而言,我會將它們放入單獨的文件中,但這是另一回事。鑑於他們是公開課,我仍然對它失敗感到驚訝,但這聽起來就是這個問題。

至於「功能評估需要所有的線程來運行」 - 這實際上不是一個錯誤,它只是顯示調試的限制時評估的屬性就需要使用不同的線程。

+0

好吧,我有一個新的問題,不知道我是否應該爲它創建一個新的問題,只是想讓你們先運行它。 我試圖用(var db = new Context())創建一個DbContext的實例,問題是它創建了一次數據庫然後當我刪除數據庫再次測試它時,它不會重新創建數據庫。任何想法,爲什麼我有這個? 編輯: nvm我剛纔調用Database.CreateIfNotExists();這解決了我的問題。 感謝一羣人的努力:) – spyronum

1

您鏈接到被寫入到目標實體框架5中的代碼。在Entity Framework 6中,虛擬代理對象使用Lazy<T>的實現進行延遲加載,爲了保證線程安全,它必須以不同的方式進行處理。我的建議是在EF6中使用virtual ICollection<Post>而不是virtual List<Post>,或者向後退到EF5,這是您引用的教程所針對的。

+0

EF5和EF6都存在問題。也改爲ICollection不修復錯誤。 – spyronum

0

我的問題是,在我的知識庫中,我返回了一個IQueryable<T>,但忘記了我的Service方法在返回結果上使用ToList()方法。