EntityFramework.dll中发生System.Data.DataException错误

时间:2014-03-21 20:17:41

标签: visual-studio-2013 asp.net-mvc-5 sql-server-express entity-framework-6 localdb

我一直在关注本教程Getting Started with Entity Framework 6 Code First using MVC 5

当我到达需要运行程序的部分并单击Student以便程序将创建数据库时,我收到以下错误。

enter image description here

  

System.Data.DataException未被用户代码处理     的HResult = -2146233087     Message =初始化数据库时发生异常。有关详细信息,请参阅InnerException。     来源=的EntityFramework     堆栈跟踪:          在System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action)          在System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization()          在System.Data.Entity.Internal.LazyInternalContext.b__4(InternalContext c)          在System.Data.Entity.Internal.RetryAction 1.PerformAction(TInput input) at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action 1个动作)          在System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase()          在System.Data.Entity.Internal.InternalContext.Initialize()          在System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)          在System.Data.Entity.Internal.Linq.InternalSet 1.Initialize() at System.Data.Entity.Internal.Linq.InternalSet 1.GetEnumerator()          在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()在c:\ Users \ Office \ Documents \ Visual Studio 2013 \ Projects \ ContosoUniversityFollow \ ContosoUniversityFollow \ Controllers \ StudentController.cs:第21行          在lambda_method(Closure,ControllerBase,Object [])          在System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase控制器,Object []参数)          在System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext,IDictionary 2 parameters) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary 2个参数)          在System.Web.Mvc.Async.AsyncControllerActionInvoker.ActionInvocation.InvokeSynchronousActionMethod()          在System.Web.Mvc.Async.AsyncControllerActionInvoker.b__36(IAsyncResult asyncResult,ActionInvocation innerInvokeState)          在System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult 2.CallEndDelegate(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase 1.End()          在System.Web.Mvc.Async.AsyncResultWrapper.End [TResult](IAsyncResult asyncResult,Object tag)          在System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)          在System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.b__3c()          在System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters。&lt;&gt; c__DisplayClass45.b__3e()     InnerException:System.Data.Entity.Core.EntityException          的HResult = -2146233087          Message =基础提供程序在Open上失败。          来源=的EntityFramework          堆栈跟踪:               在System.Data.Entity.Core.EntityClient.EntityConnection.Open()               在System.Data.Entity.Core.Objects.ObjectContext.EnsureConnection()               在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.&lt;&gt; c__DisplayClassb.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..GetEnumerator&gt; b__0()               在System.Lazy 1.CreateValue() at System.Lazy 1.LazyInitValue()               在System.Lazy 1.get_Value() at System.Data.Entity.Internal.LazyEnumerator 1.MoveNext()               在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)               在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)               在System.Data.Entity.Internal.InternalContext。&lt;&gt; 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重试,DbConnectionOptions userOptions,DbConnectionInternal&amp;连接)                    在System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection,TaskCompletionSource 1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource 1重试,DbConnectionOptions userOptions)                    在System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection,DbConnectionFactory connectionFactory,TaskCompletionSource 1 retry, DbConnectionOptions userOptions) at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource 1重试)                    在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操作)                    在System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Action操作)                    在System.Data.Entity.Core.EntityClient.EntityConnection.Open()               InnerException:

我很难解决问题。我遵循一切,甚至重做它只是为了确保我做对了。我不认为我会错过任何步骤。但是有些不对劲。如果我运行整个示例代码,一切正常。

感谢任何帮助。

谢谢,

Pheap

修改

对于导致这样的错误的简单事情来说真的很令人沮丧。 @mmeasor,我刚看到那个错误。它无法连接到数据库。所以这导致我检查连接。

首先我使用了这个连接字符串: enter image description here

所以EntityFramework在这里创建了一个数据库文件ContosoUniversity1.mdf,如C:\ Users \ Office \ ContosoUniversity1.mdf。但后来我希望它创建另一个并使用它而这次我想让它在程序App_Data \文件夹中。

所以我将web.config文件修改为: enter image description here

我想如果我这样做,EF将在\ App_Data \文件夹中为我创建一个新数据库并链接到它而不是C:\ Users \ Office中的旧数据库。

我错了!那时我开始收到上面发布的错误。我找不到导致问题的原因。

使用第二个web.config,我尝试将数据库文件复制到App_Data文件夹,但仍然无法正常工作。

现在我使用第一个连接字符串,它工作正常。

现在的问题是:如何使程序链接到\ App_Data \文件夹中的数据库文件?

谢谢,

Pheap

3 个答案:

答案 0 :(得分:3)

我在尝试将Conosto大学教程数据库的位置从User文件夹更改为App_Data文件夹时遇到了同样的问题。 John Locke让我知道这可能与必须更改数据库名称有关。

稍微更改web.config文件中指定的数据库的名称(这不一致,但确实工作不一致。如果我不得不再次测试...我相信我会在某个时候......我将远离重用名称 - 即不要在两个名称首选项之间来回切换(例如,数据库1和数据库2回到数据库1 - 我会使用完全新颖的名称,例如databse7 ... database8 ... database9 - 从以前获取名称用过的名字)

我也很幸运,一旦使用我不想要的名称创建数据库,将数据库名称更改为我想要的名称并在web.config中匹配该名称(即我能够创建“ database3.mdf“文件成功,然后在操作系统中将其更改为我想要的 - ”database1.mdf“并将web.config文件与database1匹配,并在第一次尝试时将其连接起来)

答案 1 :(得分:0)

我已经有好几天了这个问题(“ EntityFramework.dll中发生了'System.Data.DataException类型的异常,但未在用户代码中处理”),并且我尝试了一切,因为将连接字符串更改为许多不同的方法,在互联网上看到了问题和答案, 我的解决方案? 用另一个名字创建了一个新的proyect,它救了我。

答案 2 :(得分:-1)

这里EmployeeDetail是一个表名,Employee是一个模型名。和  ID,Branch,Salary和UID是表字段:

public ActionResult Index()
{
    List<EmployeeDetail> employees = context.EmployeeDetails.ToList();
    List<Employee> emp = new List<Employee>();
    foreach(EmployeeDetail item in employees)
    {
        emp.Add(new Employee
            {
                ID=Convert.ToInt32(item.ID),
                Branch=item.Branch,`enter code here`
                Salary=Conve`enter code here`rt.ToInt32(item.Salary),
                UID = Convert.ToInt32(item.ID),
            });
    }
    return View(emp);
}
  

查看页面代码

<div style="font-family:Arial">
        <h2>Index</h2>
        <ul>
            @foreach (var emp in Model)
            {
                <li>
                    @Html.ActionLink(emp.Branch, "Details", new { id = emp.ID });
                </li>
            }
        </ul>
    </div>