Argument użytej bazy DbContext
konstruktor
nazywa się nameOrConnectionString
. Dlatego obsługuje nazwę ciągu połączenia z pliku konfiguracyjnego lub, jak w twoim przypadku, rzeczywisty ciąg połączenia.
Problem z tym ostatnim polega na tym, że nie pozwala na określenie nazwy dostawcy podobnie jak w przypadku pierwszego pochodzącego z konfiguracji, w którym to przypadku EF używa tego określonego w defaultConnectionFactory
element konfiguracyjny, którym w Twoim przypadku jest System.Data.Entity.Infrastructure.SqlConnectionFactory
, innymi słowy - Sql Server , stąd port
nieobsługiwany wyjątek.
Istnieje kilka sposobów rozwiązania tego problemu.
(A) Zmień defaultConnectionFactory
konfiguracja:
<defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6"></defaultConnectionFactory>
(B) Użyj nazwanych parametrów połączenia konfiguracji i określ wyraźnie dostawcę:
<connectionStrings>
<add name="MyDB" providerName="MySql.Data.MySqlClient" connectionString="server=myservername;port=3306;uid=myaccount;database=mydb;pwd=mypwd123" />
</connectionStrings>
i zmień konstruktor na
public MyDB()
{
// ...
}
lub jeśli nazwa jest inna niż Twój DbContext
nazwa klasy pochodnej:
public MyDB() : base(connection_string_name)
{
// ...
}
(C) Użyj DbConfigurationTypeAttribute
:
[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
public class MyDB : DbContext
{
// ...
}