【发布时间】:2014-07-17 03:18:57
【问题描述】:
我将 EF6 与 MySQL 一起使用,并且有一个模型将用于多个数据库。
我希望能够在我的表单中设置连接设置。
如何以编程方式为我的模型设置连接字符串?
【问题讨论】:
-
您可以将连接字符串(或连接字符串名称)传递给 DbContext 的构造函数。
标签: c# mysql .net entity-framework
我将 EF6 与 MySQL 一起使用,并且有一个模型将用于多个数据库。
我希望能够在我的表单中设置连接设置。
如何以编程方式为我的模型设置连接字符串?
【问题讨论】:
标签: c# mysql .net entity-framework
你应该使用EntityConnectionFactory
这就是你需要的。
public string CreateConnectionString(string BasicConnectionString)
{
//EntityConnectionFactory
var entityConnectionStringBuilder= new EntityConnectionStringBuilder();
entityConnectionStringBuilder.Provider = "Your Provicer here" //For me it is "System.Data.SqlClient";
entityConnectionStringBuilder.ProviderConnectionString = BasicConnectionString;
entityConnectionStringBuilder.Metadata = "res://*";
return entityConnectionStringBuilder.ToString();
}
这是一个示例用法
MyContext ctx = new MyContext(CreateConnectionString())
由于您使用的是 DB first 方法,请参见下图
当这两个单选按钮可用时,选择第一个。然后你就可以设置你的模型的连接字符串了。
public partial class DataContext : ObjectContext
{
#region Constructors
/// <summary>
/// Initializes a new DataContext object using the connection string found in the 'DataContext' section of the application configuration file.
/// </summary>
public DataContext() : base("name=DataContext", "DataContext")
{
this.ContextOptions.LazyLoadingEnabled = true;
OnContextCreated();
}
/// <summary>
/// Initialize a new DataContext object.
/// </summary>
public DataContext(string connectionString) : base(connectionString, "DataContext")
{
this.ContextOptions.LazyLoadingEnabled = true;
OnContextCreated();
}
/// <summary>
/// Initialize a new DataContext object.
/// </summary>
public DataContext(EntityConnection connection) : base(connection, "DataContext")
{
this.ContextOptions.LazyLoadingEnabled = true;
OnContextCreated();
}
#endregion
#region Partial Methods
partial void OnContextCreated();
#endregion
...
}
在自动生成的实体类之外的部分类中添加您要查找的构造函数:
public partial class WMSChennaiDEVEntities : DbContext
{
public WMSChennaiDEVEntities(string connectionstring)
: base(connectionstring)
{
}
}
显然,EF 5/6 中不包含此构造函数,以防止我们在需要实体连接字符串时意外传递 sql 连接字符串。
【讨论】:
您必须在某处硬编码连接字符串。常见的地方是app.config。
<connectionStrings>
<add name="Connection1" connectionString="Server=localhost\ServerInstance;Database=MyDB;Trusted_Connection=True;" providerName="System.Data.SqlClient" />
然后在您的 Code First 模型中,执行以下操作:
public class MyContext : DbContext
{
public MyContext():base("Connection1")
{...}
您会看到 BCL db 库和 EF 都是为这种使用模式而设计的。
在业务应用程序中不需要更改 UI 中的连接字符串,因为用户不会经常更改数据库位置,除非您正在开发数据库管理应用程序或安装程序。
【讨论】: