Argumen dari basis DbContext yang digunakan konstruktor
disebut nameOrConnectionString . Oleh karena itu mendukung nama string koneksi dari file konfigurasi, atau seperti dalam kasus Anda string koneksi yang sebenarnya.
Masalah dengan nanti adalah tidak memungkinkan menentukan nama penyedia seperti yang pertama berasal dari konfigurasi, dalam hal ini EF menggunakan yang ditentukan dalam defaultConnectionFactory elemen konfigurasi, yang dalam kasus Anda adalah System.Data.Entity.Infrastructure.SqlConnectionFactory , dengan kata lain - Sql Server , maka port tidak didukung pengecualian.
Ada beberapa cara untuk memperbaiki masalah ini.
(A) Ubah defaultConnectionFactory konfigurasi:
<defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6"></defaultConnectionFactory>
(B) Gunakan string koneksi konfigurasi bernama dan tentukan penyedia secara eksplisit:
<connectionStrings>
<add name="MyDB" providerName="MySql.Data.MySqlClient" connectionString="server=myservername;port=3306;uid=myaccount;database=mydb;pwd=mypwd123" />
</connectionStrings>
dan ubah konstruktor menjadi
public MyDB()
{
// ...
}
atau jika namanya berbeda dari DbContext Anda nama kelas turunan:
public MyDB() : base(connection_string_name)
{
// ...
}
(C) Gunakan DbConfigurationTypeAttribute
:
[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
public class MyDB : DbContext
{
// ...
}