EF上的新功能。我正在创建用户从计算机选择数据库的应用程序。现在我想更改连接字符串以匹配数据库的位置,例如:这是当前连接字符串,它指向磁盘上某处的数据库位置(C:\ Users \ student \ Documents \ TestData.md):
add name="test" connectionString="metadata=res://*/Model2.csdl|res://*/Model2.ssdl|res://*/Model2.msl;provider=System.Data.SqlClient;provider connection string='data source=(LocalDB)\v11.0;attachdbfilename="C:\Users\student\Documents\TestData.mdf";integrated security=True;connect timeout=30;MultipleActiveResultSets=True;App=EntityFramework'" providerName="System.Data.EntityClient" />
现在,当用户从磁盘选择新数据库时,连接字符串需要更改为新数据库所在的位置(C:\ Users \ student \ Desktop \ NewSelectedDatabase.mdf):
add name="test" connectionString="metadata=res://*/Model2.csdl|res://*/Model2.ssdl|res://*/Model2.msl;provider=System.Data.SqlClient;provider connection string='data source=(LocalDB)\v11.0;attachdbfilename="C:\Users\student\Desktop\NewSelectedDatabase.mdf";integrated security=True;connect timeout=30;MultipleActiveResultSets=True;App=EntityFramework'" providerName="System.Data.EntityClient" />
现在我已经创建了文件对话框,以便用户可以选择数据库并获取其地址。我也将edmax更改为可接收自定义连接字符串:
public partial class Tester : DbContext
{
public Tester()
: base("name=Test")
{
}
public Tester(string customcs)
: base(customcs)
{
}
现在我的问题是我该如何将自定义连接字符串传递给构造函数?我希望你能理解我,因为我真的很不懂英语,不能解释一切
当您启动EF设计器时,属性窗口上的是一个连接字符串设置。设置完所需的所有设置后,将该设置清除为无。它重写生成的代码以接受实例化时传入的连接字符串。
var mything= new dbcontext (connstring)
另一个选择是仅创建一个新的类(.cs)文件,为其提供与Tester EF上下文所属的名称空间相同的名称空间,并将其粘贴在其中:
public partial class Tester : DbContext {
public Tester(string _connectionString) : base(ConnectionString(_connectionString)) {
this.Configuration.ProxyCreationEnabled = false;
this.Configuration.AutoDetectChangesEnabled = false;
}
private static string ConnectionString(string _connectionString) {
EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
entityBuilder.ProviderConnectionString = _connectionString;
entityBuilder.Metadata = "res://*/Models.Tester.csdl|res://*/Models.Tester.ssdl|res://*/Models.Tester.msl";
entityBuilder.Provider = "System.Data.SqlClient";
return entityBuilder.ToString();
}
}
请注意,这是一个局部类(就像Tester的自动生成类一样),因此您要添加到EF生成的自动生成的类中(同样,请确保它们在相同的名称空间中,因此它确实是是部分课程的补充,而不仅仅是您自己制作自己的小孩子)。
这样,您将添加一个新的构造实例化(传递一个连接字符串),该实例化将被修改为正确的entity-connection-string构建器(通过private静态ConnectionString
方法)。
var myThing = new Tester(ConfigurationManager.ConnectionStrings["db_DBName"].ToString());
我在web.config中有一行用于连接:
<add name="db_DBName" connectionString="Data Source=DBSERVER;initial Catalog=DBNAME;" providerName="System.Data.SqlClient" />
构建目标定义了它的变换,而我一直都在将相同的字符串传递给代码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句