Chciałbym podać ciąg połączenia dla mojej bazy danych w czasie wykonywania. Korzystam z Entity Framework. To, co mam tak dalekoŁańcuch połączenia jednostki wykonawczej Entity Framework
class MyClassDBContext:DbContext
{
public MyClassDBContext(string str) : base(str)
{
this.Database.Connection.ConnectionString = str;
}
}
Aby użyć powyższy kod, próbowałem
//create connection string
EntityConnectionStringBuilder myConn = new EntityConnectionStringBuilder();
myConn.Provider = "System.Data.SqlClient";
myConn.ProviderConnectionString = "user id=xxxx;password=xxxx;server=localhost;database=xxxx;connection timeout=30";
//inject the connection string at runtime
MyClassDBContext a = new MyClassDBContext(myConn.ToString())
Powyższy kod dał mi błąd mówiąc „Hasło Provider not supported”. Aby próbować debugować ten błąd, próbowałem następujące
MyClassDBContext a = new MyClassDBContext("metadata=res://*/Model.csdl|res://*/Model.ssdl|res://*/Model.msl;provider=System.Data.SqlClient;provider connection string=user id=xxxx;password=xxxx;server=localhost;database=xxxx;connection timeout=30")
Teraz mam błąd mówiąc „słowo kluczowe metadanych nie jest obsługiwany”. Więc zmieniłem kod na
MyClassDBContext a = new MyClassDBContext("provider=System.Data.SqlClient;provider connection string=user id=xxxx;password=xxxx;server=localhost;database=xxxx;connection timeout=30")
Teraz otrzymałem komunikat o błędzie "słowo kluczowe dostawcy nie jest obsługiwane". Więc ponownie zmieniłem kod na
MyClassDBContext a = new MyClassDBContext("user id=xxxx;password=xxxx;server=localhost;database=xxxx;connection timeout=30")
, a teraz działa!. Moje pytanie brzmi: jak określić dostawcę i metadane w czasie wykonywania? Wygląda na to, że akceptowany jest tylko ciąg połączenia. Używam Entity 4.3.1 od Nuget.
Dzięki
Co powinienem zrobić, gdybym najpierw musiał połączyć się z Oracle lub MySQL za pomocą kodu? –
Łańcuch połączenia EF ma wartość 'Provider =" System.Data.Entity "' i 'ConnectionString =" res: //big.csdl | res: //ball.ssdl | res: //mud.msl; provider connection string = " ... "'. Regularne ciągi połączeń zawierają szczegóły 'Provider =" System.Data.Client "' (lub Oracle lub MySql) i 'ConnectionString =", aby się z nim połączyć ". Te dwa parametry są zwykle w pliku app.config lub web.config, ale wybierasz je dynamicznie. W kodzie EF Najpierw wybierasz drugą ścieżkę. W EDMX land, musisz osadzić szczegóły drugiej ścieżki w "Ścieżce połączenia dostawcy" pierwszej ścieżki. To jest brzydkie. – robrich