77

Basically I've followed a tutorial and decided to delete the .mdf file afterwards.

Now whenever I try to run the application I get the following error (the title of this thread). The code where I get the error is shown below (ASP.NET MVC 4):

OdeToFoodDB db = new OdeToFoodDB();

public ActionResult Index()
{
    var model = db.Restaurants.ToList();
    return View(model);
}

My connection string is the following:

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

I've tried looking at the SQL Server Object Explorer but it looks the following:

Also, in Server Explorer I don't see any data connections.

And when I try to add a new connection in Server Explorer I don't see any databases named OdeToFoodDb.

Sorry for this wide question but I'm new to Entity Framework and don't quite get what's wrong here.

4

22 回答 22

128

我认为对于 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" />

我认为本地 db 不支持同一个 mdf 文件上的多个数据库,因此不支持指定初始目录(或者没有得到很好的支持,我有一些奇怪的错误)。

于 2013-11-24T16:05:08.540 回答
60

看看这个:Entity Framework don't create database

我会尝试给数据库一个不同的名称。有时,当您再次尝试创建具有相同名称的数据库时,您可能会遇到 SQL Express 问题。有一种方法可以使用 SQL Server Management Studio 解决此问题,但使用不同的数据库名称通常更容易。

编辑 此答案被接受,因为它确认了OP 使用的错误和解决方法(重命名数据库可能会有所帮助)。我完全同意重命名数据库并不是真正可接受的方式,也不能完全解决问题。不幸的是,我没有检查在 SSMS 中真正解决它的其他方法。

于 2013-06-10T20:04:22.480 回答
35
  1. 从包管理器控制台运行:

    sqllocaldb.exe stop v11.0

    sqllocaldb.exe delete v11.0

  2. 运行你的项目

  3. 注册用户
于 2015-01-15T02:02:02.887 回答
16

从应该执行此操作的连接字符串中删除此行;) "AttachDbFilename=|DataDirectory|whateverurdatabasenameis-xxxxxxxxxx.mdf"

于 2013-09-17T05:06:30.503 回答
7

“无法将文件 'C:\Github\TestService\TestService\App_data\TestService.mdf”附加为数据库 'TestService'

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

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

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

  1. 在服务器资源管理器中添加新的连接到数据库
  2. 选择 Microsoft SQL Server 数据库文件作为数据源
  3. 根据 web.config 中的连接字符串选择数据库文件名
  4. 创建了新的数据库文件,并且在服务器资源管理器中出现了两个数据库连接:“MyDatabaseName”和“MyDatabaseName (MyProjectName)”
  5. 删除一个连接(我已删除“MyDatabaseName”)
于 2014-11-17T13:27:37.250 回答
3

使用 SQL SERVER Management Studio 解决此问题

您的问题:您收到错误消息,例如“无法将文件“YourDB.mdf”附加为数据库“YourConnStringNamedContext”;

原因:发生是因为您删除了支持文件 .mdf、ldf 而没有实际删除正在运行的 SqlLocalDb 实例中的数据库;在 VS 中重新运行代码将无济于事,因为您无法重新创建具有相同名称的数据库(这就是重命名有效的原因,但会留下旧的幻像数据库名称)。

修复:我使用的是 VS2012,对不同的版本采用类似的方法。

导航到下面的路径并输入

c:\program files\microsoft sql server\110\Tools\Binn>sqllocaldb info

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

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

sqllocaldb 信息 v11.0

请注意以下信息 Owner: YourPCName\Username , State: Running , Instance pipe name: np:\.\pipe\LOCALDB#12345678\tsql\query ,其中 123456789 是一些随机字母数字

如果 State 未运行或已停止,请使用以下命令启动实例

sqllocaldb 启动 v11.0

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

在 SS Management Studio 的“连接”对话框中输入

服务器名称:np:\.\pipe\LOCALDB#12345678\tsql\query

身份验证:Windows 身份验证

用户名:(同Owner,Win.auth灰显)

连接后,找到您删除的虚拟数据库(例如 YourDB.mdf 应该创建了一个名为 YourDB 的数据库),然后将其真正删除。

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

于 2016-07-12T08:13:24.950 回答
2

碰到这个问题。在我的情况下,通过在 iispexress 仍在运行并因此仍在使用数据库时删除 .mdf 引起。右键单击系统托盘中的 iisexpress 并单击退出然后删除 MDF 以防止此错误实际发生。

要修复此错误,只需在 VS 中右键单击 App-Data 文件夹添加新项目 > SQL Server 数据库。名称:[使用更新数据库错误提供的数据库名称] 点击添加。

于 2018-01-30T21:51:47.397 回答
2

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

只需进入 Visual Studio > View > SQL Server Object Explorer 并删除旧的数据库名称及其连接。再次重试您的应用程序,它应该在 App_Data 中安装 .mdf 文件,并在服务器资源管理器中再次创建相同的数据库。

于 2017-07-12T14:24:18.217 回答
1

根据@davide-icardi,删除“初始目录=xxx;” 来自 web.config,但还要检查您的 azure 发布配置文件以将其从此处删除:
[YourAspNetProject path]\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>
于 2014-04-30T05:21:44.103 回答
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 ";集成

于 2018-07-30T21:49:39.590 回答
1

在遵循“ASP.NET MVC 5 入门 | Microsoft Docs”教程时,我遇到了同样的错误。我在 Visual Studio 2015 上。我打开 View-> SQL Server Object Explorer 并删除了以教程命名的数据库,然后它就可以工作了。请参阅从 app_data 中删除 .mdf 文件导致异常无法将文件附加为数据库

于 2017-12-21T01:42:00.970 回答
1

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

于 2017-05-17T06:37:45.387 回答
1

我没有阅读所有回复,但如果您的.mdf文件不是 SQL 安装路径的一部分,例如C:\Temp,则 SQL 数据库引擎服务帐户将无权创建和写入.ldf文件甚至读取.mdf文件.

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

这是一篇详细介绍此问题的Microsoft 文章。

于 2020-02-23T01:34:56.467 回答
0

重新创建您的数据库。不要删除它,您的应用程序应该可以继续工作。

于 2013-06-09T18:42:52.840 回答
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”命令而不会出错。希望这可以帮助。

于 2017-03-14T06:27:55.887 回答
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" />

于 2018-09-26T08:15:25.030 回答
0

我有同样的错误。奇怪的是,我有一个从头开始的新项目,它运行良好,另一个更大的项目,我总是遇到那个错误消息。

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

DropCreateDatabaseIfModelChanges

只有一种情况会遇到麻烦:如果 mdf 是自动创建的并且您删除了 mdf 和日志文件。然后就是这样。和你的自创说再见...

我发现修复它的唯一方法就像提到的那样:

sqllocaldb stop v11.0 & sqllocaldb delete v11.0

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

编辑:那不是真的。我刚刚尝试过,v11.0 会自动重新创建,并且所有 mdfs 都保持可用。我没有尝试过使用“非基于文件”的 LocalDB。

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

如果是,则问题出在 VS2013 配置和版本控制以及 nuget 之类的深渊中。

如果否,您的 LocalDB 安装有问题。

对于任何真正想了解 EF 中发生了什么的人(我仍然不确定我是否这样做:-)) http://odetocode.com/Blogs/scott/archive/2012/08/14/a-troubleshooting-实体框架连接指南 amp-migrations.aspx

PS:如果您需要正在运行的示例项目,请轻推我。

于 2015-11-15T10:16:11.027 回答
0

如果您碰巧已经应用迁移,这可能会解决它。

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

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

日期字符串应与迁移中的第一个数字匹配。

于 2018-02-10T22:56:49.697 回答
0

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

System.Data.SqlClient.SqlException (0x80131904): Cannot attach the file '.\OurDbName.mdf' as database 'OurDbName'.

只是想在这里为可能遇到此问题的其他人表达这一点。“修复”是使用绝对路径。

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

于 2018-01-04T14:28:02.273 回答
0

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

于 2019-12-09T18:31:33.853 回答
0

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

<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
于 2016-08-05T20:38:47.787 回答