roo*_*h S 6 c# sql-server entity-framework code-first
我在Winforms应用程序中使用实体框架。应用程序连接到MSSQLServer,一切正常。然后我分离数据库并将文件复制到应用程序文件夹并更改连接字符串以使用本地文件,仍然一切正常。.mdf.mdf
问题是,当我将应用程序与数据库一起复制到另一台 PC 时,EF 突然尝试重新创建数据库并抛出此错误:
无法创建文件“Path\MyDatabaseName.mdf”,因为它已存在。更改文件路径或文件名,然后重试该操作。创建数据库失败。无法创建列出的某些文件名。检查相关错误。
上下文初始化器设置为MigrateDatabaseToLatestVersion:
Database.SetInitializer<MyContext>(new MigrateDatabaseToLatestVersion<MyContext, DAL.Migrations.Configuration>("MyConnectionString"));
Run Code Online (Sandbox Code Playgroud)
此外,自动迁移已关闭,数据库由 EF Code-First 在 Sql-server 上创建,并且已更新为最新迁移,因此不需要迁移。
第一种情况的连接字符串是:
<add name="MyConnectionString" connectionString="Server=DESKTOP-XXXXXXX; Database=MyDatabase; Integrated Security=True; Connect Timeout=30;" providerName="System.Data.SqlClient">
Run Code Online (Sandbox Code Playgroud)
对于本地.mdf文件是:
<add name="MyConnectionString" connectionString="Data Source=(LocalDB)\MSSQLLocalDB; AttachDbFilename=|DataDirectory|\MyDatabase.mdf; Integrated Security=True;Connect Timeout=30" providerName="System.Data.SqlClient" />
Run Code Online (Sandbox Code Playgroud)
那么,这是怎么回事?
就我而言,转到C:\Program Files\Microsoft SQL Server\SQLSERVER\MSSQL\DATA文件夹并删除相同数据库名称“*.mdf”文件(如果存在)。删除后重新创建数据库,问题解决。
小智 5
由于我在 docker 中使用 SQL 服务器,因此我必须使用目录中的文件进入 dockerdocker exec -it <CONTAINER ID> bash并删除mdf文件/var/opt/mssql/data。
脚步:
docker ps->CONTAINER ID运行 SQL Server 的 docker 容器的副本docker exec -it <CONTAINER ID> bash-> 现在您可以查看/修改 docker 内的文件cd /cd /var/opt/mssql/data-> 转到mdf/ldf文件目录rm -rf <database_name>.mdf-> 删除mdf文件rm -rf <database_name>_log.ldf-> 删除ldf文件