如何使用实体框架设置连接字符串

时间:2014-05-28 03:46:44

标签: c# mysql .net entity-framework

我正在使用EF6与MySQL,并有一个模型,我将用于多个数据库。

我希望能够在我的表单中设置连接设置。

如何以编程方式为我的模型设置连接字符串?

2 个答案:

答案 0 :(得分:1)

你应该使用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())

:: Update ::

当您使用DB first方法时,请参阅以下图像

pic

当这两个单选按钮可用时,选择第一个。然后,您将能够设置模型的连接字符串。

以下是我的上下文的样子(虽然它是对象上下文。但在这个问题的上下文中无关紧要)

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连接字符串。

答案 1 :(得分:0)

你必须在某处硬编码连接字符串。常见的地方是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数据库库和EF都是针对此类使用模式而设计的。

在业务应用程序中不需要更改UI中的连接字符串,因为除非您正在开发数据库管理应用程序或安装程序,否则用户不会经常更改数据库位置。