【问题标题】:Cannot create file '*.mdf' because it already exists无法创建文件“*.mdf”,因为它已经存在
【发布时间】:2019-05-12 07:27:47
【问题描述】:

我在 Winforms 应用程序中使用 Entity-Framework。应用程序连接到 MSSQLServer 并且一切正常。然后我分离数据库并将.mdf文件复制到app文件夹并更改连接字符串以使用本地.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" />

那么,这是怎么回事?

【问题讨论】:

  • 三种场景的连接字符串是什么?
  • @Neil 我更新了问题
  • 两台机器的SQL server版本一样吗? (SQLExpress 或其他)。最好指定 MDF 的完整路径,而不是 |DataDirectory|
  • 开发机器有SQLServer 2016 但在目标机器上我安装了SQLLocalDB
  • @Neil 你认为这是因为版本不同吗?

标签: c# sql-server entity-framework code-first


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 2010-11-03
    相关资源
    最近更新 更多