web-dev-qa-db-ja.com

EntityFramework.dllでSystem.Data.DataExceptionエラーが発生しました

私はこのチュートリアル に従って、MVC 5 を使用してEntity Framework 6コードを開始しました。

プログラムを実行する必要があるセクションに行き、プログラムがデータベースを作成するようにStudentをクリックすると、次のエラーが発生します。

enter image description here

System.Data.DataExceptionがユーザーコードによって処理されませんでしたHResult = -2146233087メッセージ=データベースの初期化中に例外が発生しました。詳細については、InnerExceptionを参照してください。 Source = EntityFramework StackTrace:at System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action)at System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization()at System.Data.Entity.Internal.LazyInternalContext.b__4(InternalContext c )at System.Data.Entity.Internal.RetryAction 1.PerformAction(TInput input) at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action 1 action)at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase()at System.Data.Entity.Internal.InternalContext.Initialize()at System .Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)at System.Data.Entity.Internal.Linq.InternalSet 1.Initialize() at System.Data.Entity.Internal.Linq.InternalSet 1.GetEnumerator()at System.Data.Entity.Infrastructure.DbQuery 1.System.Collections.Generic.IEnumerable<TResult>.GetEnumerator() at System.Collections.Generic.List 1..ctor(IEnumerable 1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable 1 source)at ContosoUniversityFollow.Controllers.StudentController.Index()in c:\ Users\Office\Documents\Visual Studio 2013\Projects\ContosoUniversityFollow\ContosoUniversityFollow\Controllers\StudentController.cs:line 21 at lambda_method(Closure、ControllerBase、Object [])at System.Web.Mvc.AsyncでSystem.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller、Object []パラメータ)をSystem.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext、IDictionary 2 parameters) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary 2パラメータ)で.AsyncControllerActionInvoker.ActionInvocation.InvokeSynchronousActionMethod()at System.Web.Mvc.Async.AsyncControllerActionInvoker.b__36(IAsyncResult asyncResult、ActionInvocation innerInvokeState)at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult 2.CallEndDelegate(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase 1 System.Web.Mvc.Async.AsyncResultWrapper.End [TResult](IAsyncResult asyncResult、Object tag)at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters .b__3c()at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters。<> c__DisplayClass45.b__3e()InnerException:System.Data.Entity.Core.EntityException HResult = -2146233087 Message = The undオープン時にエラープロバイダーが失敗しました。 Source = EntityFramework StackTrace:at System.Data.Entity.Core.EntityClient.EntityConnection.Open()at System.Data.Entity.Core.Objects.ObjectContext.EnsureConnection()at System.Data.Entity.Core.Objects.ObjectContext。 ExecuteInTransaction [T](Func1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess) at System.Data.Entity.Core.Objects.ObjectQuery1。<> c__DisplayClassb.b__9()at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute [TResult](Func1 operation) at System.Data.Entity.Core.Objects.ObjectQuery1.GetResults(Nullable1 forMergeOption) at System.Data.Entity.Core.Objects.ObjectQuery1..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 System.Linq.Enumerable.FirstOrDefault [TSource](IEnumerable 1 source) at System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.<GetElementFunction>b__1[TResult](IEnumerable 1シーケンス)at System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.ExecuteSingle [TResult](IEnumerable 1 query, Expression queryRoot) at System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute[TResult](Expression expression) at System.Data.Entity.Internal.Linq.DbQueryProvider.Execute[TResult](Expression expression) at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable 1 source)at System.Data.Entity.Internal.EdmMetadataRepository.QueryForModelHash(Func 2 createContext) at System.Data.Entity.Internal.InternalContext.QueryForModelHash() at System.Data.Entity.Internal.ModelCompatibilityChecker.CompatibleWithModel(InternalContext internalContext, ModelHashCalculator modelHashCalculator, Boolean throwIfNoMetadata) at System.Data.Entity.Internal.InternalContext.CompatibleWithModel(Boolean throwIfNoMetadata) at System.Data.Entity.Database.CompatibleWithModel(Boolean throwIfNoMetadata) at System.Data.Entity.DropCreateDatabaseIfModelChanges 1.InitializeDatabase(TContext context)at System.Data.Entity.Internal.InternalContext。<> c__DisplayClasse 1.<CreateInitializationAction>b__d() at System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action) InnerException: System.Data.SqlClient.SqlException HResult=-2146232060 Message=Cannot open database "ContosoUniversity1" requested by the login. The login failed. Login failed for user 'Office-PC\Office'. Source=.Net SqlClient Data Provider ErrorCode=-2146232060 Class=11 LineNumber=65536 Number=4060 Procedure="" Server=(LocalDb)\v11.0 State=1 StackTrace: at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource 1 retry、DbConnectionOptions userOptions、DbConnectionInternal&connection)at System.Data.Provi System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection、DbConnectionFactory connectionFactory、TaskCompletionSource 1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource 1リトライ)でderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection、TaskCompletionSource 1 retry, DbConnectionOptions userOptions) at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource 1リトライ、DbConnectionOptions userOptions) System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource 1 retry) at System.Data.SqlClient.SqlConnection.Open() at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.<>c__DisplayClass1.<Execute>b__0() at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func 1 operation)at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Action operation)at System.Data.Entity.Core.EntityClient.EntityConnection.Open ()InnerException:

私は問題を解決するのに苦労しています。私はすべてをフォローし、それが正しいことを確認するためだけにやり直します。私はどんなステップも逃さないと思います。しかし、何か問題があります。サンプルコード全体を実行すると、すべてが正常に動作します。

どんな助けでもありがたいです。

おかげで、

激怒

編集:

このようなエラーにつながる単純なことには本当にイライラさせられました。 @mmeasor、私もそのエラーを見ました。データベースに接続できません。それで私は接続をチェックすることにしました。

最初にこの接続文字列を使用したことが何が起こったのですか。 enter image description here

したがって、EntityFrameworkは、ここにC:\ Users\Office\ContosoUniversity1.mdfのようなデータベースファイルContosoUniversity1.mdfを作成しました。しかし、別のファイルを作成してそれを代わりに使用し、今回はApp_Data \フォルダーに置きます。

そこで、web.configファイルを次のように変更しました。 enter image description here

そうすると、EFは\ App_Data \フォルダーに新しいデータベースを作成し、C:\ Users\Officeの古いデータベースの代わりにそれにリンクします。

私はとても間違っていました!それは私が上記のエラーを投稿し始めたときでした。そして、私は問題の原因を見つけることができません。

2番目のweb.configで、データベースファイルをApp_Dataフォルダーにコピーしようとしましたが、それでも機能しません。

今、私は最初の接続文字列を使用し、それは正常に動作します。

だから今問題は、プログラムを\ App_Data \フォルダ内のデータベースファイルにリンクする方法ですか?

おかげで、

激怒

9
Pheap

Conosto Universityチュートリアルデータベースの場所をUserフォルダーからApp_Dataフォルダーに変更しようとしても、同じ問題が発生しました。 John Lockeは、データベースの名前を変更する必要があることに関係している可能性があるという考えに私を突き刺しました。

Web.configファイルで指定されたデータベースの名前を少し変更します(これは一貫性のない動作をしますが、一貫して一貫性のない動作をします。これを再度テストする必要があった場合...そしていつか私は確信しています...私は離れます名前の再利用から-つまり、2つの名前設定を切り替えないでください(たとえば、database1とdatabase2をdatabase1に戻します-完全に新しい名前を使用します。例:databse7 ... database8 ... database9-以前に使用した名前から名前を取り除きます)

私も運が良かったのです。不要な名前でデータベースが作成されたら、データベース名を希望する名前に変更し、web.configでその名前と一致させます(つまり、「database3.mdf "ファイルが正常に作成され、それをOSで必要なものに変更しました-" database1.mdf "そしてweb.configファイルをdatabase1に一致させ、最初の試行で接続しました)

3
3v3rhart

私はこの問題を数日間抱えていました(「タイプ 'System.Data.DataException'の例外がEntityFramework.dllで発生しましたが、ユーザーコードでは処理されませんでした)。質問と回答、私の解決策...別の名前で新しいプロジェクトを作成し、それによって私を救いました。

0
Steve Mitre