我正在尝试为我的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\"
答案 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" />