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

基本上我已经遵循了一个教程,并决定在之后删除.mdf文件。

现在每当我尝试运行应用程序,我得到以下错误(这个线程的标题)。 我得到错误的代码如下所示(ASP.NET MVC 4):

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

我的连接string如下:

 <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对象资源pipe理器,但它看起来如下:

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

而当我尝试在服务器资源pipe理器中添加一个新的连接时,我看不到任何名为OdeToFoodDb数据库。

对不起,这个广泛的问题,但我是新来的entity framework,并没有完全得到这里的错误。

看看这个: entity framework不创build数据库

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

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

我认为对于SQL Server本地数据库你不应该使用Initial Catalog属性。 我build议使用:

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

我认为本地数据库不支持同一个mdf文件上的多个数据库,所以指定不支持初始目录(或不太受支持,我有一些奇怪的错误)。

  1. 从Package Manager Console运行:

    sqllocaldb.exe stop v11.0

    sqllocaldb.exe delete v11.0

  2. 运行你的项目

  3. 注册一个用户

从应该这样做的连接string中删除此行;)“AttachDbFilename = | DataDirectory | whateverurdatabasenameis-xxxxxxxxxx.mdf”

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

  1. 在服务器浏览器中添加新的连接到数据库
  2. selectMicrosoft SQL Server数据库文件作为数据源
  3. 根据web.config中的连接stringselect数据库文件名
  4. 新的数据库文件已创build,并在服务器资源pipe理器中出现了两个数据库连接:“MyDatabaseName”和“MyDatabaseName(MyProjectName)”
  5. 删除一个连接(我删除了“MyDatabaseName”)

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

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

  1. 打开SQL Server对象资源pipe理器
  2. 点击刷新button。
  3. 展开(localdb)\ MSSQLLocalDB(SQL Server 12.x.xxxxx – xxxxx \ xxxx)
  4. 展开数据库
  5. 请删除相同的名称数据库
  6. 点击右键,然后删除
  7. 返回到您的软件包pipe理控制台
  8. 更新数据库

根据@ davide-icardi,删除“初始目录= xxx;” 从web.config,但也检查您的azure色的发布configuration文件也从这里删除它:
[YourAspNetProjectpath] \ 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> 

我发现注释掉用来初始化数据库的上下文部分解决了这个问题。 Havnt还有时间来查明播种声明有什么问题,但是播种解决了问题。

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

我有同样的错误。 奇怪的是,我有一个新的项目forms从头开始,那里工作完美,另一个更大的项目,我总是遇到这个错误信息。

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

 DropCreateDatabaseIfModelChanges 

只有一种情况,当它遇到困难时:如果mdf是自动创build的,并且您删除了mdf和日志文件。 那就是这个了。 说再见你的自杀…

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

 sqllocaldb stop v11.0 & sqllocaldb delete v11.0 

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

编辑:这是不正确的。 我只是试了一下,v11.0自动重新创build,所有的mdfs保持可用。 我还没有尝试过使用“非基于文件的”LocalDB。

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

如果是的话,问题是在VS2013configuration和版本和nuget和东西深渊的某处。

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

对于任何真正想要了解EF中发生了什么的人(我仍然不确定是否可以:-)) http://odetocode.com/Blogs/scott/archive/2012/08/14/a-troubleshooting-导对entity framework的连接放大器,migrations.aspx

附注:如果您需要正在运行的示例项目,请将其移动。

使用SQL SERVER Management Studio修复此问题

您的问题:您收到一个错误,如'不能附加文件'YourDB.mdf'作为数据库'YourConnStringNamedContext';

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

修正:我使用VS2012,同样采用不同的版本。

导航到下面的path并input

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

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

如果实例已经运行,请在提示符处input

sqllocaldb信息v11.0

请注意以下信息所有者: YourPCName \用户名, 状态:正在运行, 实例pipe道名称: np:\。\ pipe \ LOCALDB#12345678 \ tsql \ query,其中123456789是一些随机字母数字

如果状态没有运行或停止,则使用启动实例

sqllocaldb启动v11.0

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

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

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

auth:Windowsvalidation

用户名称:(与所有者相同,为Win。auth。灰色)

一旦连接,find你删除的幻像数据库(例如YourDB.mdf应创build了一个名为YourDB的数据库),并真正删除它。

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

奇怪的是,对于完全相同的问题,是什么帮助我在configuration的以下部分中更改'to'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 

当我从前两点删除数据库时,错误仍然会发生。 所以,我也需要从SQL Server Object Explorer中删除数据库。 然后,我可以轻松地运行“更新数据库”命令没有错误。 希望这可以帮助。

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

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