我正在开发一个 DataBase First EF 应用程序,自动生成的代码和 app.config 部分一切都运行良好。但是当我尝试删除 app.config 的连接字符串并将其作为 DbContext 构造函数的参数时,我无法让它工作。
app.config 中的连接字符串:
<add name="EntityContext"
connectionString="metadata=res://*/ModelHistory.csdl|res://*/ModelHistory.ssdl|res://*/ModelHistory.msl;provider=Oracle.ManagedDataAccess.Client;provider connection string="DATA SOURCE=XXXXX;PASSWORD=xxxxx;PERSIST SECURITY INFO=True;USER ID=XXXX""
providerName="System.Data.EntityClient" />
我试图通过构造函数传递它:
public EntityContext() : base(GetConnectionString()) { }
private string GetConnectionString()
{
return metadata=res://*/ModelHistory.csdl|res://*/ModelHistory.ssdl|res://*/ModelHistory.msl;provider=Oracle.ManagedDataAccess.Client;provider connection string="DATA SOURCE=XXXXX;PASSWORD=xxxxx;PERSIST SECURITY INFO=True;USER ID=XXXX""
}
但是它抛出了错误:
其他信息:如果在 Code First 模式下使用,使用 T4 模板为 Database First 和 Model First 开发生成的代码可能无法正常工作。要继续使用数据库优先或模型优先,请确保在执行应用程序的配置文件中指定实体框架连接字符串。要使用从 Database First 或 Model First 生成的这些类,请使用 Code First 使用属性或 DbModelBuilder API 添加任何其他配置,然后删除引发此异常的代码。
我们需要将连接字符串从 app.config 文件移动到代码中。这可以在 context.cs 文件中完成。 在构造函数中,您需要指定连接字符串 在连接字符串中,您需要将 Replace quote " 替换为 '(单引号)
public partial class ProducerCentralEntities : DbContext
{
public ProducerCentralEntities()
: base(@"metadata = res://*/TestProj.csdl|res://*/TestProj.ssdl|res://*/TestProj.msl;provider=System.Data.SqlClient;provider connection string=';data source=serverName;initial catalog=databaseName;integrated security=True;MultipleActiveResultSets=True;application name=EntityFramework';")
{
}
}
注意: 1)你应该有完整的连接字符串 2) 将引号 " 替换为 '