无法创建文件“*.mdf”,因为它已经存在

问题描述 投票:0回答:3

我在 Winforms 应用程序中使用 Entity-Framework。应用程序连接到MSSQLServer并且一切正常。然后我分离数据库并将

.mdf
文件复制到应用程序文件夹,并更改连接字符串以使用本地
.mdf
文件,仍然一切正常。

问题是,当我将应用程序与数据库一起复制到另一台 PC 时,EF 突然尝试重新创建数据库并抛出此错误:

无法创建文件 'Path\MyDatabaseName.mdf',因为它已经存在。 更改文件路径或文件名,然后重试该操作。创造 数据库失败。无法创建列出的某些文件名。查看 相关错误。

上下文初始化器设置为

MigrateDatabaseToLatestVersion
:

Database.SetInitializer<MyContext>(new MigrateDatabaseToLatestVersion<MyContext, DAL.Migrations.Configuration>("MyConnectionString"));

此外,自动迁移已关闭,数据库是由 EF Code-First 在 Sql-server 上创建的,并且已更新到最新迁移,因此不需要迁移。

第一个场景的连接字符串是:

<add name="MyConnectionString" connectionString="Server=DESKTOP-XXXXXXX; Database=MyDatabase; Integrated Security=True; Connect Timeout=30;" providerName="System.Data.SqlClient">

对于本地

.mdf
文件是:

<add name="MyConnectionString" connectionString="Data Source=(LocalDB)\MSSQLLocalDB; AttachDbFilename=|DataDirectory|\MyDatabase.mdf; Integrated Security=True;Connect Timeout=30" providerName="System.Data.SqlClient" />

那么,这是怎么回事??

c# sql-server entity-framework code-first
3个回答
6
投票

在我的例子中,转到 C:\Program Files\Microsoft SQL Server\SQLSERVER\MSSQL\DATA 文件夹并删除相同的数据库名称 '*.mdf' 文件(如果存在)。删除后重新创建数据库,问题解决。


5
投票

对于在 docker 中运行的 SQL Server:

由于我在 docker 中使用 SQL 服务器,因此我必须使用

docker exec -it <CONTAINER ID> bash
进入 docker 并从
mdf
目录中删除
/var/opt/mssql/data
文件。

步骤:

  1. docker ps
    -> 复制运行 SQL Server 的 docker 容器的
    CONTAINER ID
  2. docker exec -it <CONTAINER ID> bash
    -> 现在您可以在 docker 中查看/修改文件
  3. cd /
  4. cd /var/opt/mssql/data
    -> 进入
    mdf/ldf
    文件目录
  5. rm -rf <database_name>.mdf
    -> 删除
    mdf
    文件
  6. rm -rf <database_name>_log.ldf
    -> 删除
    ldf
    文件

这解决了我的问题。


0
投票

解决此问题的方法是执行以下操作:

  1. 打开命令提示符

  2. 打开服务(输入services.msc)

  3. 找到您的 SQL Server 服务实例 -> 右键单击 -> 然后单击“停止”

  4. 导航到指定的路径(例如Path\MyDatabaseName.mdf)并将其删除或创建备份(如果您稍后需要访问它) (您可能也必须对日志文件执行相同的操作)

  5. 重试您尝试的操作

© www.soinside.com 2019 - 2024. All rights reserved.