Nuestros mejores programadores han agotado sus reservas de café, buscando a tiempo completo por la resolución, hasta que Fátima halló el hallazgo en Gitea y ahora la comparte contigo.
Solución:
El argumento de la base utilizada DbContext
se llama constructor nameOrConnectionString
. Por lo tanto, admite un nombre de conexión. string desde el archivo de configuración, o como en su caso una conexión real string.
El problema con el último es que no permite especificar el nombre del proveedor como con el primero proveniente de la configuración, en cuyo caso EF usa el especificado en el defaultConnectionFactory
elemento de configuración, que en su caso es System.Data.Entity.Infrastructure.SqlConnectionFactory
, en otras palabras – Servidor SQL, por lo tanto, la port
excepción no admitida.
Hay varias formas de solucionar el problema.
(A) Cambie el defaultConnectionFactory
configuración:
(B) Utilice la conexión de configuración nombrada string y especificar explícitamente el proveedor:
y cambia el constructor a
public MyDB()
// ...
o si el nombre es diferente al tuyo DbContext
nombre de la clase derivada:
public MyDB() : base(connection_string_name)
// ...
(C) Uso DbConfigurationTypeAttribute
:
[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
public class MyDB : DbContext
// ...
Tuve este problema mientras desarrollaba una aplicación web en Core 2. Tuve que cambiar la conexión de base de datos predeterminada utilizada de SqlServer a MySql en el archivo Startup.cs donde está configurada la aplicación.
El error similar al mencionado anteriormente se produce al trabajar con el núcleo y la base de datos de ASP.net. El proveedor de base de datos predeterminado con el núcleo de ASP.net es SQL Server pero, en caso de que esté utilizando un proveedor diferente, por ejemplo, PostgreSQL y no haya escrito o configurado correctamente el código DBContext en startup.cs
Por ejemplo: el siguiente código está escrito con la intención de conectarse a PostgresSQL, luego dará como resultado un error ArgumentException: palabra clave no admitida: ‘puerto’.
public void ConfigureServices(IServiceCollection services)
services.AddMvc();
var connection = @"Server=localhost;Port=5432;Database=NewDB;User Id=xxxxx;[email protected]
;";
services.AddDbContext(options => options.UseSqlServer(connection));
// ...
Y la razón es que el usuario está intentando conectarse a PostgreSQL pero cambió la opción predeterminada UseSQLServer después de configurar PostgreSQL string.
Para solucionar el problema, cambie la opción
options.UseSqlServer (conexión)) -> options.UseNpgsql (conexión))