【问题标题】:How to set Connection String with Entity Framework如何使用实体框架设置连接字符串
【发布时间】:2014-07-17 03:18:57
【问题描述】:

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

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

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

【问题讨论】:

  • 您可以将连接字符串(或连接字符串名称)传递给 DbContext 的构造函数。

标签: c# mysql .net entity-framework


【解决方案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())

:: 更新 ::

由于您使用的是 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 连接字符串。

【讨论】:

  • @Smarter :: 哪个 EF 版本和 VS 版本?您可以为您的数据库发布一个简单的连接字符串吗?
  • EF6,VS2013Ultimate。连接字符串不是问题,实现它就是我要问的?我的实体是由 VS(ADO.NET 实体数据模型)自动生成的,我如何在其中实现连接字符串?
  • 我保证选择了第一个设置,我收到错误“Dialer_File_Builder.hyperion_collectionsmaxEntities”不包含带 1 个参数的构造函数 - puu.sh/94q53/d8e15f54ce.png 声明:puu.sh/94q8M/78e4086e65.png
  • 我知道如何实现连接字符串,但它似乎会破坏自动生成的实现:puu.sh/94qgt/7f586a6ff6.png
  • 我想通了,就像将 base("hyp*") 更改为 base(s) =D 一样简单。
【解决方案2】:

您必须在某处硬编码连接字符串。常见的地方是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 中的连接字符串,因为用户不会经常更改数据库位置,除非您正在开发数据库管理应用程序或安装程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    相关资源
    最近更新 更多