,我發現了以下異常使用ExecuteStoreQuery
當檢索當前數據庫中指定日期的架構是無效的:MetadataException:在發佈配置使用ExecuteStoreQuery時
The types in the assembly 'XYZ' cannot be loaded because the assembly contains
the EdmSchemaAttribute, and the closure of types is being loaded by name.
Loading by both name and attribute is not allowed.
at System.Data.Metadata.Edm.ObjectItemCollection.LoadAssemblyFromCache(
ObjectItemCollection objectItemCollection, Assembly assembly,
Boolean loadReferencedAssemblies, EdmItemCollection edmItemCollection,
Action`1 logLoadMessage)
at System.Data.Metadata.Edm.MetadataWorkspace.ImplicitLoadAssemblyForType(
Type type, Assembly callingAssembly)
at System.Data.Objects.ObjectContext.ExecuteStoreQueryInternal[TElement](
String commandText, String entitySetName, MergeOption mergeOption,
Object[] parameters)
at (my method)
凡有關方法中包含
var timestamp = context.ExecuteStoreQuery<DateTime>("SELECT GetDate() ").First();
我以前使用過規範函數CurrentDateTime
,但是在調試配置中也導致了這個異常。 現在僅在發佈配置中引發。
我發現這個確切的異常只提到幾次,主要是它連接到混合代碼和數據庫第一個方法在一個程序集中,我相信我已排除在我的情況。
生成的代碼確實包含
[assembly: EdmSchemaAttribute()]
,但我不知道是哪個類型已經造成的 - 我知道沒有一個不知道如何找到它們。
如果我只使用LINQ to Entities,這一切似乎工作。
目前,我依賴我們的服務器時間進行同步,根本不查詢數據庫時間 - 這不是建議的,但遺憾的是,它不會是第一個在我們的代碼庫中依賴的時間。
而問題:
可能是什麼代碼生成包含上述屬性的原因是什麼?我怎樣才能防止呢?什麼可能是一個合理的解決方法(導入包含SELECT GetDate()
的存儲過程看起來像是一種矯枉過正)?此外,爲什麼這隻發生在發佈配置?基於編譯器符號和選項,我沒有找到關於EF優化/差異的信息...
你確定在用'SELECT GetDate()'替換'CurrentDateTime'後做了一個發佈版本嗎?我問,因爲我可以在調試和發佈版本中運行您的查詢(EF ** 5 ** db第一)。 –
是的,它是100%的發佈版本,我也可以每次重現它。我認爲調用本身不是問題,在同一個程序集中似乎與LINQ to Entities或其他數據庫訪問方法存在某種衝突,但我不知道在哪裏尋找,究竟是什麼原因。 –