我正在一个Winforms应用程序中使用Entity-Framework。该应用程序连接到MSSQLServer,一切正常。然后我分离了数据库并将.mdf文件复制到应用程序文件夹,并更改连接字符串以使用本地.mdf文件,仍然一切正常。
问题是,当我将我的应用程序和数据库一起复制到另一台计算机时,EF突然尝试重新创建数据库,并抛出以下错误:
“无法创建文件'Path\MyDatabaseName.mdf',因为它已经存在。更改文件路径或文件名,并重试操作。CREATE DATABASE失败。列出的一些文件名无法创建。检查相关错误。”
上下文初始化器设置为MigrateDatabaseToLatestVersion:
那么,这里发生了什么事情?
问题是,当我将我的应用程序和数据库一起复制到另一台计算机时,EF突然尝试重新创建数据库,并抛出以下错误:
“无法创建文件'Path\MyDatabaseName.mdf',因为它已经存在。更改文件路径或文件名,并重试操作。CREATE DATABASE失败。列出的一些文件名无法创建。检查相关错误。”
上下文初始化器设置为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" />
那么,这里发生了什么事情?
|DataDirectory|
文件夹中创建一个空的数据库,这样我们就可以确定路径是正确的。基本上这是令人困惑的部分:EF忽略了数据库文件的存在,并试图用新文件覆盖该文件。 - roozbeh S