本地数据库上的代码优先EF-迁移到企业SQL Server
本文关键字:迁移 EF- 企业 Server SQL 数据库 代码 | 更新日期: 2023-09-27 18:27:46
我最初使用LocalDB将应用程序的数据模型开发为Code First EF6,一切都很好。
我现在需要将数据库移到我们的Enterprise SQL Server环境中,但我没有适当的权限来使用Code First。。。所有要创建/修改的脚本都必须由DBA生成、评估、批准和执行。。
我遇到的问题是我的DB Connect字符串有问题,因为我尝试过的那些都失败了。如前所述,在我使用LocalDB之前,使用了默认的连接字符串。
DBContext构造函数
public HotelRequestDBContext() : base("HotelRequestsDB")
{
//Database.SetInitializer<HotelRequestDBContext>(new HotelRequestDBContextInitialiser());
if (Properties.Settings.Default.EFTrace)
{
this.Database.Log = msg => System.Diagnostics.Trace.WriteLine(msg);
}
}
连接字符串尝试1
<add name="HotelRequestsDB" connectionString="Data Source=server'instance;initial catalog=HoteRequests;persist security info=True;user id=username;password=password;multipleactiveresultsets=True;application name=EntityFramework" providerName="System.Data.EntityClient" />
Exception thrown: 'System.ArgumentException' in EntityFramework.dll
Additional information: Keyword not supported: 'data source'.
If there is a handler for this exception, the program may be safely continued.
连接字符串尝试2
<add name="HoteRequestsDB" connectionString="metadata=res://*/HoteRequests.csdl|res://*/HoteRequests.ssdl|res://*/HoteRequests.msl;provider=System.Data.SqlClient;provider connection string="data source=server'instance;initial catalog=HoteRequests;persist security info=True;user id=user;password=password;multipleactiveresultsets=True;application name=EntityFramework"" providerName="System.Data.EntityClient" />
异常弹出窗口
Exception thrown: 'System.Data.DataException' in EntityFramework.dll
Additional information: An exception occurred while initializing the database. See the InnerException for details.
If there is a handler for this exception, the program may be safely continued.
调试输出窗口
Cannot attach the file 'C:'Projects'HotelRequests'HotelRequests'App_Data'HotelRequestsDB.mdf' as database 'HotelRequestsDB'.
连接字符串providerName="System.Data.EntityClient"
的末尾通常会导致这种情况。在启动项目的配置文件中的某个位置,您应该看到一些带有<entityFramework>
标记的xml。它是自动生成的。
要连接到sql服务器,您需要确保<provider>
如下所示:
<entityFramework>
<providers>
<provider invariantName="System.Data.EntityClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
(您也应该将连接字符串和提供者名称中的名称更改为System.Data.SqlClient
,以确保正确。)