【问题标题】:Set Connection String at Runtime - EF Code First在运行时设置连接字符串 - EF 代码优先
【发布时间】:2016-03-31 06:38:19
【问题描述】:

尝试在运行时使用连接字符串或将其从 App.config 中删除。但是我收到错误消息。

仅供参考:EF 6 CodeFirst

public class DfDbContext : DbContext
{
    public DfDbContext()
        : base(GetConnectionString())
    {

    }


    private static string GetConnectionString()
    {
        SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
        builder.DataSource = "xxxxx";
        builder.InitialCatalog = "xxxx";
        builder.UserID = "xxx";
        builder.Password = "xxxx";
        builder.MultipleActiveResultSets = true;
        builder.PersistSecurityInfo = true;
        return builder.ConnectionString.ToString();

    }
}

错误

“System.ArgumentException”类型的异常发生在 System.Data.dll 但未在用户代码中处理

附加信息:不支持关键字:“初始目录”。

任何替代解决方案?

【问题讨论】:

  • 数据源为服务器名称。 InitialCatalog 是该服务器上的哪个数据库。 (对于 SQL Server。)
  • 哦,大概就是这样。从该连接字符串中,EF 无法知道您正在与 SQL Server 数据库通信。你如何告诉 EF 你正在使用什么数据库类型,以便它知道如何解释连接字符串?
  • 如果你传入一个打开的连接而不是一个连接字符串会发生什么? (是的,我猜,但听起来应该可以。)
  • 可以添加builder.Provider = "System.Data.SqlClient";例如:msdn.microsoft.com/en-us/library/bb738533(v=vs.100).aspx

标签: c# sql-server entity-framework


【解决方案1】:

参考link。一个有效的连接字符串应该如下

<add name="XXXX" 
     connectionString="Data Source=MONTGOMERY-XXXX;Initial Catalog=XXXX;Integrated Security=True;" 
     providerName="System.Data.SqlClient" />

我认为您错过了提供者名称。尝试添加并检查

【讨论】:

    【解决方案2】:

    问题解决了!设置默认连接工厂!

    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="Data Source=.; Integrated Security=True; MultipleActiveResultSets=True" />
      </parameters>
    </defaultConnectionFactory>
    

    使用以下 DbContext。

    public class Model : DbContext
    {
        public Model()
            : base(ConnectionString())
        {
        }
    
        public virtual DbSet<MyEntity> MyEntities { get; set; }
    
        private static string ConnectionString()
        {
            // logic here
            return "Data Source=(local);Initial Catalog=xx;Integrated Security=False;User ID=sa;Password=xx;MultipleActiveResultSets=True;App=EntityFramework";
        }
    }
    

    【讨论】:

    • xml 中设置的连接字符串没有读取,而是模型函数中的硬代码。我们可以在 app.config 文件中使用 defaultConnectionFactory 标记吗?如何从代码中读取它?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-20
    • 2015-09-08
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多