在运行时使用连接字符串
本文关键字:连接 字符串 运行时 | 更新日期: 2023-09-27 18:34:41
>我使用数据库优先方法创建了我的模型。问题是我的连接字符串在运行时发生了更改。因此,我为采用连接字符串的 DBContext 类添加了一个重载构造函数。
public partial class MyDataContext: DbContext
{
public MyDataContext: ()
: base("name=DbEntities")
{
}
// added this overloaded contructor
public MyDataContext: (string connectionString)
: base(connectionString)
{
}
我在运行时得到的连接字符串如下所示。
Integrated Security=SSPI;Data Source=localhost'sqlexpress;initial catalog=MyDatabase;Max Pool Size=100;Min Pool Size=20;Connect Timeout=15;
当我使用使用重载构造函数创建的 MyDataContext 运行查询时,我收到以下错误。
System.Data.Entity.Infrastructure.UnintentionalCodeFirstException: 上下文在代码优先模式下使用的代码 从数据库优先或模型优先的 EDMX 文件生成 发展。 这将无法正常工作。要解决此问题,请不要 删除引发此异常的代码行。如果您想使用 数据库优先或模型优先,然后确保实体 框架连接字符串包含在 app.config 中或 启动项目的 web.config。如果您正在创建自己的 DbConnection,然后确保它是一个实体连接,而不是 一些其他类型的 DbConnection,并将其传递给其中一个 采用 DbConnection 的基本 DbContext 构造函数。了解更多 关于代码优先、数据库优先和模型优先查看实体 框架文档在这里: http://go.microsoft.com/fwlink/?LinkId=394715
知道如何做到这一点吗?
您需要创建一个 EntityConnectionString 并将该字符串传递给您的 DbContext。您当前只使用 SqlConnectionString。我建议你看看EntityConnectionStringBuilder。
这是一个可用于 Sql 数据库优先方法的示例;
SqlConnectionStringBuilder sqlStringBuilder = new SqlConnectionStringBuilder();
sqlStringBuilder.Database = "database name":
sqlStringBuilder.Password = "password";
sqlStringBuilder.UserID = "userid";
// other properties
EntityConnectionStringBuilder entityStringBuilder = new EntityConnectionStringBuilder();
entityStringBuilder.ProviderConnectionString = sqlBuilder.ConnectionString;
entityStringBuilder.Provider = "System.Data.MySqlClient";
entityStringBuilder.Metadata = "resx//*/YourDbContext.csdl|resx//*/YourDbContext.ssdl|resx//*/YourDbContext.msl";
MyDbContext dbContext = new MyDbContext(entityStringBuilder.ConnectionString);