Mysql
 sql >> Base de données >  >> RDS >> Mysql

C# Entity Framework :mot clé non pris en charge :'port'

L'argument de la base utilisée DbContext constructeur s'appelle nameOrConnectionString . Par conséquent, il prend en charge le nom d'une chaîne de connexion à partir du fichier de configuration ou, comme dans votre cas, une chaîne de connexion réelle.

Le problème avec ce dernier est qu'il ne permet pas de spécifier le nom du fournisseur comme pour le premier provenant de la configuration, auquel cas EF utilise celui spécifié dans defaultConnectionFactory élément de configuration, qui dans votre cas est System.Data.Entity.Infrastructure.SqlConnectionFactory , en d'autres termes - Sql Server , d'où le port exception non prise en charge.

Il existe plusieurs façons de résoudre le problème.

(A) Changer le defaultConnectionFactory configuration :

<defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6"></defaultConnectionFactory>

(B) Utilisez la chaîne de connexion de configuration nommée et spécifiez explicitement le fournisseur :

<connectionStrings>
    <add name="MyDB" providerName="MySql.Data.MySqlClient" connectionString="server=myservername;port=3306;uid=myaccount;database=mydb;pwd=mypwd123" />
</connectionStrings>

et changez le constructeur en

public MyDB()
{
    // ...
}

ou si le nom est différent de votre DbContext nom de la classe dérivée :

public MyDB() : base(connection_string_name)
{
    // ...
}

(C) Utilisez DbConfigurationTypeAttribute :

[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
public class MyDB : DbContext
{
    // ...
}