EF Code第一个关键字不受支持:'provider'

时间:2017-06-14 14:26:35

标签: c# entity-framework

我正在尝试为我的EF模型动态提供数据库凭据。使用Database First时,以下方法在过去一直有效。有几个类似的SO问题,但似乎没有解决这个问题。我在这里缺少什么?

private const string ProviderName = "System.Data.SqlClient";

var SqlConnectionStringBuilder = new SqlConnectionStringBuilder {
    DataSource = this.ServerName,
    InitialCatalog = this.DatabaseName,
    IntegratedSecurity = true
};
var EntityConnectionStringBuilder = new EntityConnectionStringBuilder {
    Provider = ProviderName,
    ProviderConnectionString = SqlConnectionStringBuilder.ToString()
};
using(var db = new AuditingContext(EntityConnectionStringBuilder.ToString())) 
{
    var session = new Session() {
    };
    db.Sessions.Add(session);
    //ArgumentException occurs here
    //Keyword not supported: 'provider'.
}

DbContext

public class AuditingContext: DbContext {
    public DbSet <Session> Sessions { get; set; }
    public DbSet <Cause> Causes { get; set; }
    public AuditingContext(string connectionStringName): base(connectionStringName) {}
}

连接字符串

provider=System.Data.SqlClient;provider connection string=\"Data Source=localhost;Initial Catalog=TEST_DATABASE;Integrated Security=True\"

3 个答案:

答案 0 :(得分:1)

正如DevilSuichiro所指出的,EF5 +的DbContext是一个连接字符串而不是EntityConnectionString。这解决了这个问题。

var connString = "provider=System.Data.SqlClient;provider connection string=\"Data Source=localhost;Initial Catalog=TEST_DATABASE;Integrated Security=True\"";
using(var db = new AuditingContext(connString)) 
{
   //...
}

答案 1 :(得分:0)

我正在使用控制台应用程序来测试Sql Server 2016的Code First方法。 我的初始connectionString是:

add name="MyCodeFirstDb" connectionString="
Data Source=MyServer;
Initial Catalog=MyCodeFirstDb;
Provider=SQLNCLI11.1;
Integrated Security=SSPI;
Auto Translate=False;"

我将“connectionStrings”部分放在“entityFramework”部分之后。

创建linq查询时出现的错误是:

  

“无法识别关键字提供商”

我删除了“Provider = SQLNCLI11.1;”

然后我得到了错误:

  

“关键字自动翻译无法识别”

我删除了“AutoTranslate = False;”

然后我能够运行查询并创建了我的数据库。

答案 2 :(得分:-1)

像那样使用

<add name="TerminalA" connectionString="Data 
Source=192.168.1.104;Database=ABC;Integrated Security=false;User 
ID=sa;Password=pass@123;" providerName="System.Data.SqlClient" />