我在本地服务器上使用SQL Db winforms app。我使用Database_First添加了EF5。 问题是: 如何使用“OpenFileDialog”在“运行时”中更改EF5模型的连接字符串?
我想为应用程序提供一个“功能”,让客户端指定应用程序数据库所在的数据库服务器。
答案 0 :(得分:2)
有两个问题需要考虑。 第一个DbContext具有构造函数,该构造函数接受用户定义的连接字符串,但此构造函数不会在生成的上下文代码中公开,因此您必须将其添加到生成的代码之外的部分文件中。 然后,Entity Framework连接字符串本身与典型的SqlClient连接字符串不同,因此您必须使用EntityConnectionStringBuilder来构建适当的连接字符串。
例如,请考虑以下示例代码:
public partial class MyContext: DbContext
{
public MyContext(string efConnectionString):base(efConnectionString)
{
}
public static MyContext CreateContextFromAdoCS(string adoConnectionString)
{
EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
//Set the provider name.
entityBuilder.Provider = "System.Data.SqlClient";
// Set the provider-specific connection string.
entityBuilder.ProviderConnectionString = adoConnectionString;
// Set the Metadata location.
entityBuilder.Metadata = @"res://*/MyModel.csdl|
res://*/MyModel.ssdl|
res://*/MyModel.msl";
var efCs = entityBuilder.ToString();
return new MyContext(efCs);
}
}
如果您有现有的SqlClient连接字符串,则可以使用工厂方法创建上下文的实例。
在这里Display a ConnectionString dialog,您可以看到如何打开标准对话框来构建SqlClient连接字符串。
答案 1 :(得分:0)
让它在App.config
中<add name="ConnectionStringNew" connectionString="Data Source=ServerName;user id=sa;Password=sasa;initial catalog=[DataBase]" />
让Combobox让用户选择数据库。
使用以下编码对组合框进行处理。
SqlConnection con1 = new SqlConnection (ConfigurationManager.ConnectionStrings["ConnectionStringNew"].ConnectionString);
SqlCommand comm = new SqlCommand("SELECT ROW_NUMBER() OVER(ORDER BY NAME) AS ID,NAME FROM SYS.SYSDATABASES WHERE DBID > 4 ORDER BY NAME", con);
SqlDataAdapter da = new SqlDataAdapter(comm);
da.Fill(dtblDataBase);
cmbDataBase.DataSource = dtblDataBase;
cmbDataBase.ValueMember = "ID";
cmbDataBase.DisplayMember = "NAME";
替换数据库名称如下所示。
DataBaseName = Convert.ToString(con1.ConnectionString);
CommonVariables.strDataBaseName = DataBaseName.Replace("[DataBase]", cmbDataBase.Text.Trim());
CommonVariables.strCompanyName = cmbDataBase.Text.Trim();
我刚给出了一个编码样本..根据需要自定义。