2017-06-14 86 views
0

我試圖動態提供數據庫憑證給我的EF模型。以前的方法在使用Database First時起作用。有幾個類似的SO問題,但似乎沒有解決這個問題。我在這裏錯過了什麼?EF代碼優先關鍵字不支持:'提供者'

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

我不認爲EF5 +的DbContext確實期望一個實體連接字符串,而是一個普通的連接字符串。 – DevilSuichiro

+0

就這麼簡單。非常感謝@DevilSuichiro。 –

回答

0

正如DevilSuichiro指出的那樣,爲的DbContext EF5 +是一個連接字符串和不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

使用就像那個

<add name="TerminalA" connectionString="Data 
Source=192.168.1.104;Database=ABC;Integrated Security=false;User 
ID=sa;[email protected];" providerName="System.Data.SqlClient" /> 
0

我使用一個控制檯應用程序來測試與SQL Server代碼優先的方法2016年 我最初的connectionString是:

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

我把我的「entityFramework」部分之後的「connectionStrings」部分。

創建LINQ查詢時,我得到的錯誤是:

「關鍵字提供商無法識別」

我刪除了 「供應商= SQLNCLI11.1;」

然後我得到了錯誤:

「關鍵字自動翻譯無法識別」

我刪除 「AutoTranslate = FALSE;」

我然後能夠運行查詢和我的數據庫被創建。