2012-09-24 67 views
0

我已經使用EF代碼先創建數據庫。在開發中非常有用。我將它複製到一個Windows Server 2003中,我得到這些錯誤(列在下面)部署到遠程服務器時出現實體框架架構錯誤

EF 5,.NET 4.0。

我已經卸載並重新安裝.net 4框架。並在其他機器上測試過。

在我的Windows Server 2008中,它工作正常。在另一個2003盒子上沒有。

爲了將MVC排除在外,我構建了一個簡單的控制檯應用程序,該應用程序列出了數據庫中的一些數據。 - 同樣的錯誤。

我已經在VS 2012中編寫了一切,並在機器上安裝了.net 4.5。我讀過這可能會導致一個問題,所以我重寫了VS 2010中的所有內容,以.net 4爲目標,並手動將引用添加到EF 5/.net4 dll中。同樣的事情,在我的2臺dev的機器的偉大工程,以及2008年的服務器,但不是2003年

錯誤:

Schema specified is not valid. Errors: 
(0,0) : warning 0005: Could not find schema information for the attribute 'Namespace'. 
(0,0) : warning 0005: Could not find schema information for the attribute 'Provider'. 
(0,0) : warning 0005: Could not find schema information for the attribute 'ProviderManifestToken'. 
(0,0) : warning 0005: Could not find schema information for the attribute 'Alias'. 
(0,0) : error 0010: The element Schema in namespace http://schemas.microsoft.com/ado/2009/11/edm/ssdl was unexpected for the root element. The expected Schema in one of the following namespaces: http://schemas.microsoft.com/ado/2006/04/edm/ssdl, http://schemas.microsoft.com/ado/2009/02/edm/ssdl. 

這裏的堆棧跟蹤(這是一個MVC應用程序)

 
[MetadataException: Schema specified is not valid. Errors: 
(0,0) : warning 0005: Could not find schema information for the attribute 'Namespace'. 
(0,0) : warning 0005: Could not find schema information for the attribute 'Provider'. 
(0,0) : warning 0005: Could not find schema information for the attribute 'ProviderManifestToken'. 
(0,0) : warning 0005: Could not find schema information for the attribute 'Alias'. 
(0,0) : error 0010: The element Schema in namespace http://schemas.microsoft.com/ado/2009/11/edm/ssdl was unexpected for the root element. The expected Schema in one of the following namespaces: http://schemas.microsoft.com/ado/2006/04/edm/ssdl, http://schemas.microsoft.com/ado/2009/02/edm/ssdl.] 
    System.Data.Metadata.Edm.Loader.ThrowOnNonWarningErrors() +8508793 
    System.Data.Metadata.Edm.Loader.LoadItems(IEnumerable`1 xmlReaders, IEnumerable`1 sourceFilePaths) +181 
    System.Data.Metadata.Edm.StoreItemCollection.Init(IEnumerable`1 xmlReaders, IEnumerable`1 filePaths, Boolean throwOnError, DbProviderManifest& providerManifest, DbProviderFactory& providerFactory, String& providerManifestToken, Memoizer`2& cachedCTypeFunction) +211 
    System.Data.Metadata.Edm.StoreItemCollection..ctor(IEnumerable`1 xmlReaders) +295 
    System.Data.Entity.Migrations.Extensions.XDocumentExtensions.GetStoreItemCollection(XDocument model, DbProviderInfo& providerInfo) +180 
    System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.Diff(XDocument sourceModel, XDocument targetModel, String connectionString) +48 
    System.Data.Entity.Internal.InternalContext.ModelMatches(XDocument model) +45 
    System.Data.Entity.Internal.ModelCompatibilityChecker.CompatibleWithModel(InternalContext internalContext, ModelHashCalculator modelHashCalculator, Boolean throwIfNoMetadata) +65 
    System.Data.Entity.Internal.InternalContext.CompatibleWithModel(Boolean throwIfNoMetadata) +52 
    System.Data.Entity.CreateDatabaseIfNotExists`1.InitializeDatabase(TContext context) +239 
    System.Data.Entity.Internal.c__DisplayClass8.b__6() +19 
    System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action) +72 

[DataException: An exception occurred while initializing the database. See the InnerException for details.] 
    System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action) +117 
    System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization() +186 
    System.Data.Entity.Internal.LazyInternalContext.b__4(InternalContext c) +7 
    System.Data.Entity.Internal.RetryAction`1.PerformAction(TInput input) +118 
    System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action`1 action) +190 
    System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase() +73 
    System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) +28 
    System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() +56 
    System.Data.Entity.Internal.Linq.InternalSet`1.GetEnumerator() +15 
    System.Data.Entity.Infrastructure.DbQuery`1.System.Collections.Generic.IEnumerable.GetEnumerator() +40 
    System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) +315 
    System.Linq.Enumerable.ToList(IEnumerable`1 source) +58 
    Kiosk.Controllers.KioskEventController.Index() in c:\Dev\hbkiosk\Kiosk\Controllers\KioskEventController.cs:23 
    lambda_method(Closure , ControllerBase , Object[]) +62 
    System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +17 
    System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +188 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +27 
    System.Web.Mvc.Async.c__DisplayClass42.b__41() +28 
    System.Web.Mvc.Async.c__DisplayClass8`1.b__7(IAsyncResult _) +12 
    System.Web.Mvc.Async.WrappedAsyncResult`1.End() +50 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +29 
    System.Web.Mvc.Async.c__DisplayClass39.b__33() +59 
    System.Web.Mvc.Async.c__DisplayClass4f.b__49() +240 
    System.Web.Mvc.Async.c__DisplayClass37.b__36(IAsyncResult asyncResult) +12 
    System.Web.Mvc.Async.WrappedAsyncResult`1.End() +50 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +31 
    System.Web.Mvc.Async.c__DisplayClass2a.b__20() +23 
    System.Web.Mvc.Async.c__DisplayClass25.b__22(IAsyncResult asyncResult) +128 
    System.Web.Mvc.Async.WrappedAsyncResult`1.End() +50 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +26 
    System.Web.Mvc.c__DisplayClass1d.b__18(IAsyncResult asyncResult) +14 
    System.Web.Mvc.Async.c__DisplayClass4.b__3(IAsyncResult ar) +25 
    System.Web.Mvc.Async.WrappedAsyncResult`1.End() +55 
    System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +41 
    System.Web.Mvc.Async.c__DisplayClass4.b__3(IAsyncResult ar) +25 
    System.Web.Mvc.Async.WrappedAsyncResult`1.End() +55 
    System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +28 
    System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10 
    System.Web.Mvc.c__DisplayClass8.b__3(IAsyncResult asyncResult) +28 
    System.Web.Mvc.Async.c__DisplayClass4.b__3(IAsyncResult ar) +25 
    System.Web.Mvc.Async.WrappedAsyncResult`1.End() +55 
    System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +30 
    System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8836913 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184 

+0

你能檢查你所引用的entityframework.dll的文件版本嗎? NuGet包包含兩個版本:.NET 4的4.4和.NET 4.5的5.0 –

+0

它是4.4。即使在更改目標框架並卸載/恢復nuget包後,VS 2012仍希望使用5,因此我刪除了該參考並手動添加了對4.4 dll的引用。驗證輸出目錄包含4.4 dll並且項目仍然正常運行。 – Zeph

+0

試着把這個屬性放在你的上下文類中: [DbModelBuilderVersion(DbModelBuilderVersion.V4_1)] –

回答

3

我能夠通過更改我的連接字符串來解決這個問題,以便通過在項目中安裝正確的dll來創建新鮮的db。然後我將數據從舊數據庫遷移到新數據庫。

我的假設是,EF 5代碼存儲在數據庫中的一些元數據(雖然我無法驗證這一點)。由於EF代碼首先會在數據庫不存在的情況下創建數據庫/模式,我只是將連接字符串更改爲不存在的數據庫,運行該項目並讓EF構建數據庫,然後從創建的數據庫中遷移現有數據由V.5添加到v.4創建的db。

+0

你能否進一步解釋「改變我的連接字符串以便創建數據庫新鮮」的含義?我有同樣的問題,這個答案几乎是唯一的地方與分辨率 –

+1

肯定 - 更新我的答案 – Zeph

0

我更新了.NET Framework到4.5,它工作。