Argumentet for den brugte base DbContext
konstruktør
kaldes nameOrConnectionString
. Derfor understøtter den et navn på en forbindelsesstreng fra konfigurationsfilen, eller som i dit tilfælde en egentlig forbindelsesstreng.
Problemet med den senere er, at den ikke tillader specificering af udbyderens navn som med førstnævnte, der kommer fra konfigurationen, i hvilket tilfælde EF bruger den, der er angivet i defaultConnectionFactory
konfigurationselement, som i dit tilfælde er System.Data.Entity.Infrastructure.SqlConnectionFactory
, med andre ord - Sql Server , deraf port
ikke understøttet undtagelse.
Der er flere måder at løse problemet på.
(A) Skift defaultConnectionFactory
konfiguration:
<defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6"></defaultConnectionFactory>
(B) Brug navngivet konfigurationsforbindelsesstreng og angiv eksplicit udbyderen:
<connectionStrings>
<add name="MyDB" providerName="MySql.Data.MySqlClient" connectionString="server=myservername;port=3306;uid=myaccount;database=mydb;pwd=mypwd123" />
</connectionStrings>
og ændre konstruktøren til
public MyDB()
{
// ...
}
eller hvis navnet er anderledes end din DbContext
afledt klassenavn:
public MyDB() : base(connection_string_name)
{
// ...
}
(C) Brug DbConfigurationTypeAttribute
:
[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
public class MyDB : DbContext
{
// ...
}