无法将文件 * . mdf 附加为数据库

基本上,我已经遵循了一个教程,并决定删除 .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" />

我尝试查看 SQLServer 对象资源管理器,但它看起来如下:

此外,在服务器资源管理器中,我没有看到任何数据连接。

当我尝试在服务器资源管理器中添加新连接时,我没有看到任何名为 OdeToFoodDb的数据库。

对于这个宽泛的问题,我很抱歉,但我是实体框架的新手,不太明白这里出了什么问题。

118927 次浏览

重建你的数据库。不要删除它,你的应用程序应该继续工作。

看看这个: 实体框架不创建数据库

我会试着给数据库一个 有时你可能会遇到问题与 SQLExpress 当第二次尝试创建同名数据库时。 有一种方法可以使用 SQLServerManagementStudio 解决这个问题,但是 使用不同的数据库名称通常更容易。

剪辑 这个答案被接受,因为它确认了 臭虫和 OP 使用的变通方法(可以重命名数据库 帮助)。我完全同意重命名数据库不是一种真正可以接受的方式,而且 并不能完全解决问题。不幸的是,我没有检查在 SSMS 中真正解决它的其他方法。

从应该执行此操作的连接字符串中删除此行;) “ AttachDbFilename = | DataDirectory | whateverurdatabase asenameis-xxxxxxxx. mdf”

我认为对于 SQLServerLocalDb,不应该使用 Initial Catalog属性。 我建议使用:

<add name="DefaultConnection"
connectionString="Data Source=(LocalDb)\v11.0;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\OdeToFoodDb.mdf"
providerName="System.Data.SqlClient" />

我认为本地 db 不支持同一 mdf 文件上的多个数据库,因此指定初始目录不受支持(或者支持不足,并且存在一些奇怪的错误)。

根据@davide-icardi 的说法,从 web.config 中删除“ InitialCatalog = xxx;”,但也要检查一下你的蔚蓝色发布配置文件,从这里删除它:
[ YourAspNetProject 路径]属性 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>

我也遇到过同样的问题。 VS 2013中的以下步骤为我解决了这个问题:

  1. 在服务器资源管理器中添加新的“连接到数据库”
  2. 选择 Microsoft SQL Server 数据库文件作为数据源
  3. 根据 web.config 中的连接字符串选择数据库文件名
  4. 创建了新的数据库文件,服务器资源管理器中出现了两个数据库连接: “ MyDatabaseName”和“ MyDatabaseName (MyProjectName)”
  5. 删除一个连接(我已经删除了“ MyDatabaseName”)
  1. 从包管理器控制台运行:

    sqllocaldb.exe stop v11.0

    sqllocaldb.exe delete v11.0

  2. 运行你的项目

  3. 注册一个用户

我也犯了同样的错误。 奇怪的是,我有一个新的项目表单,在那里它完美地工作,另一个更大的项目,在那里我总是遇到这个错误消息。

工作正常的项目(几乎)总是自动创建数据库(包括文件)。它可以是任何命令、读、写、更新。文件被创建。 当然

DropCreateDatabaseIfModelChanges

当它遇到麻烦时,只有一种情况: 如果 mdf 是自动创建的,并且您删除了 mdf 和日志文件。那就这样了。跟你的自动创造说再见吧。

我找到的唯一解决办法就像上面提到的:

sqllocaldb stop v11.0 & sqllocaldb delete v11.0

之后,一切恢复正常(LocalDB 处理的所有其他数据库也都不见了!)。

编辑: 那不是真的。我只是尝试了一下,就自动重新创建了 v11.0,所有的 mdfs 仍然可用。我还没有尝试使用“非基于文件的”LocalDBs。

令人困惑的是,如果有其他错误,我也会得到这个错误。 所以我的建议是,如果你想确保你的数据库设置是健全和可靠的: 从头开始创建一个新的解决方案/项目,使用最基本的 DB 命令(添加一个实体,显示所有实体,删除所有实体) ,看看它是否有效。

如果是的话,问题就出在 VS2013配置、版本控制、 nuget 等等的深渊里。

如果没有,则说明您的 LocalDB 安装有问题。

对于任何真正想了解英孚正在发生什么的人(我仍然不确定我是否了解: ——) Http://odetocode.com/blogs/scott/archive/2012/08/14/a-troubleshooting-guide-for-entity-framework-connections-amp-migrations.aspx

附注: 如果你需要运行示例项目,请轻推我。

“无法将文件‘ C: Github TestService TestService App _ data TestService.mdf’作为数据库‘ TestService’附加到‘ C: Github TestService TestService App _ data TestService.mdf’”

遇到上述错误消息时,请执行以下步骤。

  1. 打开 SQLServer 对象资源管理器
  2. 点击刷新按钮。
  3. 展开(localdb) MSSQLLocalDB (SQL Server 12.x. xxxxx-xxxxx xxxx)
  4. 展开数据库
  5. 请删除已存在的同名数据库
  6. 单击右键,然后删除
  7. 返回到您的包管理控制台
  8. 更新-资料库

使用 SQLSERVERManagementStudio 修复此问题

您的问题: 您得到一个错误,比如“无法将文件‘ YourDB.mdf’作为数据库‘ YourConnStringNamedContext’附加”;

原因: 发生是因为您删除了备份文件。在运行中的 SqlLocalDb 实例中重新运行代码没有任何帮助,因为你不能重新创建一个同名的数据库(这就是为什么重命名可以工作,但是留下了老的幻影数据库名)。

解决方案: 我使用的是 VS2012,对于不同的版本采用类似的方法。

导航到下面的路径并进入

C: 程序文件 Microsoft SQL Server 110 Tools Binn > sqllocaldb info

上面的 cmd 显示了实例名称,包括‘ v11.0’

如果实例已经在运行,请在提示符下输入

Sqllocaldb info v11.0

请注意以下信息 所有者: YourPCName 用户名, 国家: 运行, 实例管道名称: np: . tube LOCALDB # 12345678 tsql query, 123456789是随机的字母数字吗

如果 State 没有运行或停止,则使用

Sqllocaldb start v11.0

并提取与上述相同的信息。

在 SSManagementStudio“ Connect”对话框中输入

Server name: np: . tube LOCALDB # 12345678 tsql query

Auth: Windows auth

User name: (与 Owner 相同,Win.auth 的用户名为灰色)

一旦连接,找到您删除的幻影数据库(例如 YourDB.mdf 应该已经创建了一个名为 YourDB 的数据库) ,然后真正地删除它。

完成! 一旦它走了,VS EF 应该没有问题重新创建它。

奇怪的是,对于完全相同的问题,帮助我的是在配置的下面部分中将“ v11.0”更改为“ v11.0”。

<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>

我最近也遇到了同样的问题。 在视觉工作室有三个地方,我们应该检查和删除数据库。

1. Solution Explorer's App_Data folder
2. Server Explorer's Data Connection menu
3. SQL Server Object Explorer

当我从前两点删除数据库时,仍然会出现错误。因此,我还需要从 SQLServer 对象资源管理器中删除数据库。 然后我可以很容易地运行‘ update-database’命令而不出错。 希望这个能帮上忙。

我发现注释掉用于初始化数据库的上下文部分解决了这个问题。还没有时间找出种子语句出了什么问题,但删除种子解决了这个问题。

服务器资源管理器中已经安装了该数据库的旧副本。因此,它是服务器对象资源管理器/SQL 服务器中的一个简单命名冲突。在决定将数据库 CatalogName 移动到 Apps _ Data 文件夹之前,您可能已经创建了相同的数据库 CatalogName。因此,数据库名称已经存在,只需删除即可。

只需进入 VisualStudio > View > SQLServer 对象资源管理器并删除旧的数据库名称及其连接。重试你的应用程序,它应该安装。在 App _ Data 中创建 mdf 文件,并在服务器资源管理器中再次创建相同的数据库。

我在学习“开始使用 ASP.NET MVC 5 | Microsoft Docs”教程时也犯了同样的错误。我参加了 Visual Studio 2015。 我打开 View-> SQLServer 对象资源管理器,删除了以本教程命名的数据库,然后它就可以工作了。 请参阅 < a href = “ https://stackoverflow. com/questions/13001441/Delete-mdf-file-from-app-data-cause-eption-cannot-att- the-file-as-database”> 从 app _ data 中删除. mdf 文件导致异常不能将该文件作为数据库附加

我们只是在使用 ASP.Net Core 2.1运行 dotnet ef database update时遇到了这个问题; 看起来 AttachDbFileName不支持相对路径。

System.Data.SqlClient.SqlException (0x80131904) : 无法将文件“ . OurDbName.mdf”作为数据库“ OurDbName”附加。

我只是想在这里为其他可能碰到这种情况的人表达一下。“修复”是使用绝对路径。

参见: https://github.com/aspnet/EntityFrameworkCore/pull/6446

遇到了这个问题。导致我的情况下,删除。Mdf,因此仍在使用 DB。 在系统托盘中右键单击 iisExpress 并单击 exit THEN 删除 MDF 以防止此错误实际发生。

要修复此错误,只需在 VS 中右键单击 App-Data 文件夹添加新项 > SQLServer 数据库。Name: [使用 update-database 错误提供的数据库名称] 单击“添加”。

如果您碰巧已经应用了迁移,这可能会修复它。

转到 Web.config 并根据迁移文件更新连接字符串。

Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-GigHub-201802102244201.mdf;Initial Catalog=aspnet-GigHub-201802102244201;

日期字符串应该与“迁移”上的第一个数字相匹配。

只需从 Config 项目级别文件中更改数据库名称,然后更新数据库。

ConnectionString = Data Source = (LocalDb) MSSQLLocalDB; AttachDbFilename = “ | DataDirectory | aspnet-Project name-20180413070506. mdf”; InitialCatalog = “ aspnet ——20180413070506”;

将粗体数字更改为其他数字:

ConnectionString = Data Source = = (LocalDb) MSSQLLocalDB; AttachDbFilename = “ | DataDirectory | aspnet-Project name-20180413070507. mdf”; InitialCatalog = “ aspnet ——20180413070507”;

遇到类似的问题不完全一样,一个案例的数据库已经存在的问题,通过以下代码解决。

<add name="DefaultConnection" connectionString="Data Source=.;AttachDbFilename=|DataDirectory|\aspnet-EjournalParsing-20180925054839.mdf;Initial Catalog=aspnet-EjournalParsing-20180925054839;Integrated Security=True"
providerName="System.Data.SqlClient" />

在我的例子中,从连接字符串中删除 Initial Catalog=....解决了这个问题

我没有读取所有的响应,但是如果你的 .mdf文件不是 SQL 安装路径的一部分,像 C:\Temp,那么 SQL 数据库引擎服务帐户将没有权限创建和写入 .ldf文件,甚至读取 .mdf文件。

解决方案是必须为运行 SQL 实例服务的 SQLServer 数据库引擎服务帐户授予文件系统权限。所以对我来说,我给权限完全控制通过文件资源管理器我的 C:\Temp路径,其中包含我的 .mdf文件的 NT Service\MSSQL$SQLEXPRESS01NT Service\MSSQL$MSSQL2016帐户。

这里有一个 微软文章,详细说明了这个问题。