我一直在关注本教程Getting Started with Entity Framework 6 Code First using MVC 5。
当我到达需要运行程序的部分并单击Student以便程序将创建数据库时,我收到以下错误。
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.InternalSet1.Initialize() at System.Data.Entity.Internal.Linq.InternalSet
1.GetEnumerator() 在System.Data.Entity.Infrastructure.DbQuery1.System.Collections.Generic.IEnumerable<TResult>.GetEnumerator() at System.Collections.Generic.List
1..ctor(IEnumerable1 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,IDictionary2 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.WrappedAsyncResult2.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](Func1 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](Func1 operation) at System.Data.Entity.Core.Objects.ObjectQuery
1.GetResults(Nullable1 forMergeOption) at System.Data.Entity.Core.Objects.ObjectQuery
1..GetEnumerator&gt; b__0() 在System.Lazy1.CreateValue() at System.Lazy
1.LazyInitValue() 在System.Lazy1.get_Value() at System.Data.Entity.Internal.LazyEnumerator
1.MoveNext() 在System.Linq.Enumerable.FirstOrDefault [TSource](IEnumerable1 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](IEnumerable1 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(Func2 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__DisplayClasse1.<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,TaskCompletionSource1 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,TaskCompletionSource1 retry, DbConnectionOptions userOptions) at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource
1重试) 在System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource1 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,我刚看到那个错误。它无法连接到数据库。所以这导致我检查连接。
首先我使用了这个连接字符串:
所以EntityFramework在这里创建了一个数据库文件ContosoUniversity1.mdf,如C:\ Users \ Office \ ContosoUniversity1.mdf。但后来我希望它创建另一个并使用它而这次我想让它在程序App_Data \文件夹中。
所以我将web.config文件修改为:
我想如果我这样做,EF将在\ App_Data \文件夹中为我创建一个新数据库并链接到它而不是C:\ Users \ Office中的旧数据库。
我错了!那时我开始收到上面发布的错误。我找不到导致问题的原因。
使用第二个web.config,我尝试将数据库文件复制到App_Data文件夹,但仍然无法正常工作。
现在我使用第一个连接字符串,它工作正常。
现在的问题是:如何使程序链接到\ App_Data \文件夹中的数据库文件?
谢谢,
Pheap
答案 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>