基本上我已经按照教程并决定之后删除.mdf
文件。
现在每当我尝试运行应用程序时,我都会收到以下错误(此主题的标题)。 我收到错误的代码如下所示(ASP.NET MVC 4):
OdeToFoodDB db = new OdeToFoodDB();
public ActionResult Index()
{
var model = db.Restaurants.ToList();
return View(model);
}
我的连接字符串如下:
<add name="DefaultConnection"
connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=OdeToFoodDb;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\OdeToFoodDb.mdf"
providerName="System.Data.SqlClient" />
我已经尝试过查看SQL Server对象资源管理器,但它看起来如下:
此外,在Server Explorer中,我看不到任何数据连接。
当我尝试在服务器资源管理器中添加新连接时,我看不到任何名为OdeToFoodDb
的数据库。
对于这个广泛的问题感到抱歉,但我是Entity Framework的新手,并且在这里不会有什么问题。
答案 0 :(得分:111)
我认为对于SQL Server Local Db,您不应该使用Initial Catalog
属性。
我建议使用:
<add name="DefaultConnection"
connectionString="Data Source=(LocalDb)\v11.0;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\OdeToFoodDb.mdf"
providerName="System.Data.SqlClient" />
我认为本地数据库不支持同一个mdf文件中的多个数据库,因此不支持指定初始目录(或者不支持,并且我有一些奇怪的错误)。
答案 1 :(得分:53)
看看这个:Entity Framework don't create database
我会尝试给数据库一个 不同的名字。有时您可能会遇到SQL Express问题 在尝试第二次创建具有相同名称的数据库时。 有一种方法可以使用SQL Server Management Studio来解决这个问题 通常更容易使用不同的数据库名称。
修改强> 这个答案被接受了,因为它确认了 bug 和OP使用的解决方法(重命名数据库可以帮助)。我完全同意重命名数据库并不是一种可接受的方式,并不能完全解决问题。不幸的是,我没有检查其他方法在SSMS中真正解决它。
答案 2 :(得分:31)
从Package Manager控制台运行:
sqllocaldb.exe stop v11.0
sqllocaldb.exe delete v11.0
运行您的项目
答案 3 :(得分:15)
从应该执行此操作的连接字符串中删除此行;) “AttachDbFilename = | DataDirectory目录| whateverurdatabasenameis-xxxxxxxxxx.mdf”
答案 4 :(得分:6)
&#34;无法附加文件&#39; C:\ Github \ TestService \ TestService \ App_data \ TestService.mdf&#34;作为数据库&#39; TestService&#39;
当您遇到上述错误消息时,请执行以下步骤。
答案 5 :(得分:5)
我遇到了同样的问题。 VS 2013中的以下步骤为我解决了这个问题:
答案 6 :(得分:2)
您已在服务器资源管理器中安装该数据库的旧副本。因此它在Server Object Explorer / SQL服务器中发生了简单的命名冲突。在您决定将其移动到Apps_Data文件夹之前,您可能已经创建了相同的数据库目录名称。因此,数据库名称已存在,只需要删除。
进入Visual Studio&gt;查看&gt; SQL Server对象资源管理器并删除旧数据库名称及其连接。再次重试您的应用程序,它应该在App_Data中安装.mdf文件,并在服务器资源管理器中再次创建相同的数据库。
答案 7 :(得分:1)
我没有阅读所有响应,但是如果您的.mdf
文件不是SQL安装路径的一部分(例如C:\Temp
),那么SQL数据库引擎服务帐户将没有创建和写入.ldf
文件甚至读取.mdf
文件的权限。
解决方案是您必须为运行SQL实例服务的SQL Server数据库引擎服务帐户授予文件系统权限。因此,对我来说,我通过Windows资源管理器授予了C:\Temp
路径的完全控制权限,该路径包含.mdf
和NT Service\MSSQL$SQLEXPRESS01
帐户的NT Service\MSSQL$MSSQL2016
文件。
这里是Microsoft article,详细介绍了此问题。
答案 8 :(得分:1)
只需从 web.config项目级别文件更改数据库名称,然后更新数据库。
connectionString =数据源 =(LocalDb)\ MSSQLLocalDB; AttachDbFilename =“ | DataDirectory | \ aspnet-项目名称-2018041307050 6 .mdf”;初始目录=“ aspnet--2018041307050 6 “;集成
将粗体数字更改为其他数字:
connectionString =数据源 ==(LocalDb)\ MSSQLLocalDB; AttachDbFilename =“ | DataDirectory | \ aspnet-项目名称-2018041307050 7 .mdf”;初始目录= “ aspnet--2018041307050 7 ”;集成
答案 9 :(得分:1)
进入这个问题。在我的情况下,由于在iispexress仍在运行时删除了.mdf,因此仍在使用数据库。 右键单击系统托盘中的iisexpress,然后单击退出然后删除MDF以防止实际发生此错误。
要在VS中修复此错误,请右键单击App-Data文件夹添加新项&gt; SQL Server数据库。名称:[使用update-database错误提供的数据库名称] 单击添加。
答案 10 :(得分:1)
在遵循&#34; ASP.NET MVC 5入门|的教程时遇到了同样的错误Microsoft Docs&#34;。我在Visual Studio 2015上。 我打开了View-&gt; SQL Server对象资源管理器并删除了教程后命名的数据库,然后就可以了。 见Delete .mdf file from app_data causes exception cannot attach the file as database
答案 11 :(得分:1)
我发现注释掉用于初始化数据库的上下文部分解决了问题。 Havnt有时间找出播种声明的错误,但删除播种解决了这个问题。
答案 12 :(得分:1)
使用SQL SERVER Management Studio修复此问题
您的问题:您收到错误消息,例如&#39;无法附加文件&#39; YourDB.mdf&#39; as database&#39; YourConnStringNamedContext&#39 ;;
原因:是因为您删除了后备文件.mdf,ldf而没有实际删除正在运行的SqlLocalDb实例中的数据库;在VS中重新运行代码不会有帮助,因为你无法重新创建一个具有相同名称的数据库(这就是为什么重命名有效,但是留下了旧的幻像数据库名称)。
修复:我使用的是VS2012,对于不同的版本采用类似的方法。
导航至以下路径并输入
c:\ program files \ microsoft sql server \ 110 \ Tools \ Binn&gt; sqllocaldb info
以上cmd显示实例名称,包括&#39; v11.0&#39;
如果实例已在运行,请在提示符下输入
sqllocaldb info v11.0
请注意以下信息 所有者: YourPCName \ Username, 状态:正在运行, 实例管道名称: np:\。\ pipe \ LOCALDB#12345678 \ tsql \ query, 其中123456789是一些随机的字母数字
如果State未运行或停止,请使用
启动实例sqllocaldb start v11.0
并提取与上述相同的信息。
在SS Management Studio&#39; Connect&#39;对话框输入
服务器名称:np:\。\ pipe \ LOCALDB#12345678 \ tsql \ query
身份验证:Windows身份验证
用户名:(与所有者相同,Win。身份验证时显示为灰色。)
连接后,找到你删除的幻像数据库(例如,YourDB.mdf应该创建一个名为YourDB的数据库),并真正删除它。
完成!一旦它消失,VS EF应该没有问题重新创建它。
答案 13 :(得分:1)
根据@ davide-icardi,删除“Initial Catalog = xxx;”从web.config,但也检查你的azure发布配置文件,从这里删除它:
[YourAspNetProject路径] \ Properties \ PublishProfiles [YourAspNetProjectName] .pubxml
<PublishDatabaseSettings>
<Objects xmlns="">
<ObjectGroup Name="YourAspNetProjectName" Order="1" Enabled="True">
<Destination Path="Data Source=AzureDataBaseServer;Initial Catalog=azureDatabase_db;User ID=AzureUser_db_sa@AzureDataBaseServer;Password=test" />
<Object Type="DbCodeFirst">
<Source Path="DBMigration" DbContext="YourAspNetProjectName.Models.ApplicationDbContext, YourAspNetProjectName" MigrationConfiguration="YourAspNetProjectName.Migrations.Configuration, YourAspNetProjectName" Origin="Configuration" />
</Object>
</ObjectGroup>
</Objects>
</PublishDatabaseSettings>
答案 14 :(得分:0)
我最近遇到了同样的问题。这是一件要检查的事情。 在visual studio中有三个地方我们应该检查并删除数据库。
1. Solution Explorer's App_Data folder
2. Server Explorer's Data Connection menu
3. SQL Server Object Explorer
当我从前两点删除数据库时,仍然会发生错误。因此,我还需要从SQL Server对象资源管理器中删除数据库。 然后我可以轻松地运行'update-database'命令而不会出错。 希望这可以帮助。
答案 15 :(得分:0)
A2 = array(apply(X, 1L, function (x) outer(x,x)), dim=c(10,10,20))
# test
X <- matrix(seq(10*20),20,10)
A <- array(dim=c(10,10,20))
for (i in 1:10){
for (j in 1:10){
A[i,j,] <- X[,i] * X[,j]
}
}
all.equal(A, A2) # TRUE
答案 16 :(得分:0)
我们在使用ASP.Net Core 2.1运行dotnet ef database update
时遇到了这个问题。看起来AttachDbFileName
不支持相对路径。
System.Data.SqlClient.SqlException (0x80131904): Cannot attach the file '.\OurDbName.mdf' as database 'OurDbName'.
只是想在这里为那些可能碰到这个问题的人表达。 “修复”是使用绝对路径。
另请参阅:https://github.com/aspnet/EntityFrameworkCore/pull/6446
答案 17 :(得分:0)
我有同样的错误。 奇怪的是,我有一个新的项目表单,它完美地工作,另一个更大的项目,我总是遇到错误信息。
完全正常工作的项目(几乎)总是自动创建数据库(包括文件)。它可以是任何命令,读取,写入,更新。文件被创建。 当然它使用
DropCreateDatabaseIfModelChanges
只有一种情况,当它遇到麻烦时:如果mdf是自动创建的,则删除mdf和日志文件。那是关于它的。跟你的自我创造道别......
我找到修复它的唯一方法就像提到的那样:
sqllocaldb stop v11.0 & sqllocaldb delete v11.0
之后,一切都恢复正常(LocalDB处理的所有其他数据库也都消失了!)。
编辑:那不是真的。我刚尝试过,v11.0会自动重新创建,所有mdfs都可用。我没有尝试使用“非基于文件”的LocalDB。令人困惑的是,如果出现其他问题,我也会收到此错误。 所以我的建议是,如果你想确保你的数据库设置是健全的: 从头开始创建新的解决方案/项目,使用最基本的DB命令(添加实体,显示所有实体,删除所有实体)并查看它是否有效。
如果是,则问题出现在VS2013配置和版本控制以及nuget和东西的深渊中。
如果否,您的LocalDB安装有问题。
对于任何真正想要了解EF中发生的事情的人(我仍然不确定我是否这样做:-)) http://odetocode.com/Blogs/scott/archive/2012/08/14/a-troubleshooting-guide-for-entity-framework-connections-amp-migrations.aspx
P.S。:如果您需要正在运行的示例项目,请轻推我。
答案 18 :(得分:0)
如果您恰好应用迁移,则可以解决此问题。
转到Web.config并根据迁移文件更新连接字符串。
Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-GigHub-201802102244201.mdf;Initial Catalog=aspnet-GigHub-201802102244201;
日期字符串应与您的迁移中的第一个数字相匹配。
答案 19 :(得分:0)
遇到相似的问题并不完全相同,一个数据库已经存在的情况,通过以下代码解决了该问题。
<add name="DefaultConnection" connectionString="Data Source=.;AttachDbFilename=|DataDirectory|\aspnet-EjournalParsing-20180925054839.mdf;Initial Catalog=aspnet-EjournalParsing-20180925054839;Integrated Security=True"
providerName="System.Data.SqlClient" />
答案 20 :(得分:0)
就我而言,从连接字符串中删除Initail Cataloge=....
可以解决问题
答案 21 :(得分:0)
重新创建数据库。不要删除它,你的应用程序应继续工作。