none
¿Quiero saber si hay algún problema usando Entity Framework Core en preparar mi aplicación para SQL Server, MySQL y PostgreSQL? RRS feed

  • Pregunta

  • Muy buenas a todos, pues la pregunta va ahí en el título, ¿hay algún problema en crear una aplicación web ASP.NET Core 2.1 que utilice indistintamente MySQL, PostgreSQL o SQL Server? logicamente usare Entity Frameowork Core y Identity que además metere modificaciones en la base de datos según las necesidades de mi aplicación, pero usando Identity para el login y regisrtro de usuarios incluso datos de usuarios que estaran en otra tabla pero estara relacionada con la tabla de usuarios de Identity.

    Todo esto viene a que estoy empezando el desarrollo de una aplicacion ASP.NET Core y quiero darle soporte de momento ac esas 3 bases de datos y queria saber, si hay problemas o no en darle soporte a esas 3 bases de datos.

    miércoles, 13 de marzo de 2019 13:00

Todas las respuestas

  • hola

    En principio no deberias tener problemas, siempre y cuendo siempre vayas por la implementacion estandar y base que provee el mapping

    O sea, si defines alguna caracteristica que pueda provee el provider para una db que no tenga la otra ahi tendras problemas, por ejemplos tipos espaciales, algun mecanismo de indexacion, stored procedure, etc

    Si implementas algo simple que soporte las 3 dbs deberias poder cambiar el provider y el connection string sin presentar problemas, o al menos en teoria deberias poder hacerlo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 14 de marzo de 2019 13:22
  • Pues me estoy dando cabezazos ya me entiendes justo con implementar PostgreSQL en ASP.NET Core 2.1 porque no hay forma de que una vez instalada lalibreria usando nuget, coja lo necesario para realizar la conxeion con la base dec datos según documentación hay que poner algo así

    https://docs.microsoft.com/es-es/ef/core/get-started/aspnetcore/new-db?tabs=visual-studio

    imagina que quiero hacer eso mismo pero usando PostgreSQL pues he instalado Npgsql y no hay manera de usarlo ni de decirle todo lo que pone ahí con las lineas de código esenciales detodas maneras me pondre a desarrollar la apliacion usando SQL Server Local DB y luego ya probare a solucionar estos problemas porqué si no veo que me puedo tirar varios dias para solucionarlos.

    A parte de que como es logico estoy usando Identity que tal vez eso sea otro problema, lo que no me gusta de las tecnologias de Microsoft es que practicamente te estan obligando a usar su base de datos SQL Server porque todo esta pensando y programado para SQL Server y usar otra base dec datos es un follon.

    http://www.npgsql.org/efcore/ con esa documentación por ejemplo no hay forma de usar PostgreSQL.

    gracias

    viernes, 15 de marzo de 2019 13:03
  • A ver Leandro ando trabajando ahora mismo a ver como implemento desde el principio PostgreSQL y bueno he seguido una guía de como usar un conector que por cierto usando migraciones da problemas, algo que no debería bueno en la guía te dice que pongas estas clases de esta manera:

    Update appsettings.json

    Configure connection string in project's appsettings.json, replacing the username, password, and dbname appropriately:

    "ConnectionStrings": {
        "DefaultConnection": "User ID=username;Password=password;Server=localhost;Port=5432;Database=dbname;Integrated Security=true;Pooling=true;"
    },
    

    <svg aria-hidden="true" class="octicon octicon-link" height="16" viewBox="0 0 16 16" width="16"></svg>

    Modify Startup.cs

    Inside Startup.cs ConfigureServices() method, replace the UseSqlServer option with PostgresSQL:

    public void ConfigureServices(IServiceCollection services)
    {
        // Add framework services.
        services.AddDbContext<ApplicationDbContext>(options =>
            options.UseNpgsql(Configuration.GetConnectionString("DefaultConnection")));
    

    Con esto se supone que yapuedes empezar adesarrollar pues me dio este error al usar el método:

    Update-Database, lo del añadir la migración me deja pero el error es este.

    PM> Update-Database
    The EF Core tools version '2.1.1-rtm-30846' is older than that of the runtime '2.1.8-servicing-32085'. Update the tools for the latest features and bug fixes.
    Microsoft.EntityFrameworkCore.Infrastructure[10403]
          Entity Framework Core 2.1.8-servicing-32085 initialized 'ApplicationDbContext' using provider 'Npgsql.EntityFrameworkCore.PostgreSQL' with options: None
    Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (23ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          SELECT EXISTS (SELECT 1 FROM pg_catalog.pg_class c JOIN pg_catalog.pg_namespace n ON n.oid=c.relnamespace WHERE c.relname='__EFMigrationsHistory');
    Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          SELECT EXISTS (SELECT 1 FROM pg_catalog.pg_class c JOIN pg_catalog.pg_namespace n ON n.oid=c.relnamespace WHERE c.relname='__EFMigrationsHistory');
    Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          SELECT "MigrationId", "ProductVersion"
          FROM "__EFMigrationsHistory"
          ORDER BY "MigrationId";
    Microsoft.EntityFrameworkCore.Migrations[20402]
          Applying migration '00000000000000_CreateIdentitySchema'.
    Applying migration '00000000000000_CreateIdentitySchema'.
    Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (197ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          CREATE TABLE "AspNetRoles" (
              "Id" text NOT NULL,
              "Name" varchar(256) NULL,
              "NormalizedName" varchar(256) NULL,
              "ConcurrencyStamp" text NULL,
              CONSTRAINT "PK_AspNetRoles" PRIMARY KEY ("Id")
          );
    Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (108ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          CREATE TABLE "AspNetUsers" (
              "Id" text NOT NULL,
              "UserName" varchar(256) NULL,
              "NormalizedUserName" varchar(256) NULL,
              "Email" varchar(256) NULL,
              "NormalizedEmail" varchar(256) NULL,
              "EmailConfirmed" boolean NOT NULL,
              "PasswordHash" text NULL,
              "SecurityStamp" text NULL,
              "ConcurrencyStamp" text NULL,
              "PhoneNumber" text NULL,
              "PhoneNumberConfirmed" boolean NOT NULL,
              "TwoFactorEnabled" boolean NOT NULL,
              "LockoutEnd" timestamp with time zone NULL,
              "LockoutEnabled" boolean NOT NULL,
              "AccessFailedCount" integer NOT NULL,
              CONSTRAINT "PK_AspNetUsers" PRIMARY KEY ("Id")
          );
    Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (59ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          CREATE TABLE "AspNetRoleClaims" (
              "Id" integer NOT NULL,
              "RoleId" text NOT NULL,
              "ClaimType" text NULL,
              "ClaimValue" text NULL,
              CONSTRAINT "PK_AspNetRoleClaims" PRIMARY KEY ("Id"),
              CONSTRAINT "FK_AspNetRoleClaims_AspNetRoles_RoleId" FOREIGN KEY ("RoleId") REFERENCES "AspNetRoles" ("Id") ON DELETE CASCADE
          );
    Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (75ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          CREATE TABLE "AspNetUserClaims" (
              "Id" integer NOT NULL,
              "UserId" text NOT NULL,
              "ClaimType" text NULL,
              "ClaimValue" text NULL,
              CONSTRAINT "PK_AspNetUserClaims" PRIMARY KEY ("Id"),
              CONSTRAINT "FK_AspNetUserClaims_AspNetUsers_UserId" FOREIGN KEY ("UserId") REFERENCES "AspNetUsers" ("Id") ON DELETE CASCADE
          );
    Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (68ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          CREATE TABLE "AspNetUserLogins" (
              "LoginProvider" varchar(128) NOT NULL,
              "ProviderKey" varchar(128) NOT NULL,
              "ProviderDisplayName" text NULL,
              "UserId" text NOT NULL,
              CONSTRAINT "PK_AspNetUserLogins" PRIMARY KEY ("LoginProvider", "ProviderKey"),
              CONSTRAINT "FK_AspNetUserLogins_AspNetUsers_UserId" FOREIGN KEY ("UserId") REFERENCES "AspNetUsers" ("Id") ON DELETE CASCADE
          );
    Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (65ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          CREATE TABLE "AspNetUserRoles" (
              "UserId" text NOT NULL,
              "RoleId" text NOT NULL,
              CONSTRAINT "PK_AspNetUserRoles" PRIMARY KEY ("UserId", "RoleId"),
              CONSTRAINT "FK_AspNetUserRoles_AspNetRoles_RoleId" FOREIGN KEY ("RoleId") REFERENCES "AspNetRoles" ("Id") ON DELETE CASCADE,
              CONSTRAINT "FK_AspNetUserRoles_AspNetUsers_UserId" FOREIGN KEY ("UserId") REFERENCES "AspNetUsers" ("Id") ON DELETE CASCADE
          );
    Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (57ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          CREATE TABLE "AspNetUserTokens" (
              "UserId" text NOT NULL,
              "LoginProvider" varchar(128) NOT NULL,
              "Name" varchar(128) NOT NULL,
              "Value" text NULL,
              CONSTRAINT "PK_AspNetUserTokens" PRIMARY KEY ("UserId", "LoginProvider", "Name"),
              CONSTRAINT "FK_AspNetUserTokens_AspNetUsers_UserId" FOREIGN KEY ("UserId") REFERENCES "AspNetUsers" ("Id") ON DELETE CASCADE
          );
    Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (40ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          CREATE INDEX "IX_AspNetRoleClaims_RoleId" ON "AspNetRoleClaims" ("RoleId");
    fail: Microsoft.EntityFrameworkCore.Database.Command[20102]
          Failed executing DbCommand (11ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          CREATE UNIQUE INDEX "RoleNameIndex" ON "AspNetRoles" ("NormalizedName") WHERE [NormalizedName] IS NOT NULL;
    Npgsql.PostgresException (0x80004005): 42601: error de sintaxis en o cerca de «[»
       at Npgsql.NpgsqlConnector.<>c__DisplayClass161_0.<<ReadMessage>g__ReadMessageLong|0>d.MoveNext()
    --- End of stack trace from previous location where exception was thrown ---
       at Npgsql.NpgsqlConnector.<>c__DisplayClass161_0.<<ReadMessage>g__ReadMessageLong|0>d.MoveNext() in C:\projects\npgsql\src\Npgsql\NpgsqlConnector.cs:line 1032
    --- End of stack trace from previous location where exception was thrown ---
       at Npgsql.NpgsqlDataReader.NextResult(Boolean async, Boolean isConsuming) in C:\projects\npgsql\src\Npgsql\NpgsqlDataReader.cs:line 444
       at Npgsql.NpgsqlDataReader.NextResult() in C:\projects\npgsql\src\Npgsql\NpgsqlDataReader.cs:line 332
       at Npgsql.NpgsqlCommand.ExecuteDbDataReader(CommandBehavior behavior, Boolean async, CancellationToken cancellationToken) in C:\projects\npgsql\src\Npgsql\NpgsqlCommand.cs:line 1221
       at Npgsql.NpgsqlCommand.ExecuteNonQuery(Boolean async, CancellationToken cancellationToken) in C:\projects\npgsql\src\Npgsql\NpgsqlCommand.cs:line 1044
       at Npgsql.NpgsqlCommand.ExecuteNonQuery() in C:\projects\npgsql\src\Npgsql\NpgsqlCommand.cs:line 1027
       at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.Execute(IRelationalConnection connection, DbCommandMethod executeMethod, IReadOnlyDictionary`2 parameterValues)
    Failed executing DbCommand (11ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
    CREATE UNIQUE INDEX "RoleNameIndex" ON "AspNetRoles" ("NormalizedName") WHERE [NormalizedName] IS NOT NULL;
    Npgsql.PostgresException (0x80004005): 42601: error de sintaxis en o cerca de «[»
       at Npgsql.NpgsqlConnector.<>c__DisplayClass161_0.<<ReadMessage>g__ReadMessageLong|0>d.MoveNext()
    --- End of stack trace from previous location where exception was thrown ---
       at Npgsql.NpgsqlConnector.<>c__DisplayClass161_0.<<ReadMessage>g__ReadMessageLong|0>d.MoveNext() in C:\projects\npgsql\src\Npgsql\NpgsqlConnector.cs:line 1032
    --- End of stack trace from previous location where exception was thrown ---
       at Npgsql.NpgsqlDataReader.NextResult(Boolean async, Boolean isConsuming) in C:\projects\npgsql\src\Npgsql\NpgsqlDataReader.cs:line 444
       at Npgsql.NpgsqlDataReader.NextResult() in C:\projects\npgsql\src\Npgsql\NpgsqlDataReader.cs:line 332
       at Npgsql.NpgsqlCommand.ExecuteDbDataReader(CommandBehavior behavior, Boolean async, CancellationToken cancellationToken) in C:\projects\npgsql\src\Npgsql\NpgsqlCommand.cs:line 1221
       at Npgsql.NpgsqlCommand.ExecuteNonQuery(Boolean async, CancellationToken cancellationToken) in C:\projects\npgsql\src\Npgsql\NpgsqlCommand.cs:line 1044
       at Npgsql.NpgsqlCommand.ExecuteNonQuery() in C:\projects\npgsql\src\Npgsql\NpgsqlCommand.cs:line 1027
       at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.Execute(IRelationalConnection connection, DbCommandMethod executeMethod, IReadOnlyDictionary`2 parameterValues)
       at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteNonQuery(IRelationalConnection connection, IReadOnlyDictionary`2 parameterValues)
       at Microsoft.EntityFrameworkCore.Migrations.MigrationCommand.ExecuteNonQuery(IRelationalConnection connection, IReadOnlyDictionary`2 parameterValues)
       at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationCommandExecutor.ExecuteNonQuery(IEnumerable`1 migrationCommands, IRelationalConnection connection)
       at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration)
       at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(String targetMigration, String contextType)
       at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase.<>c__DisplayClass0_1.<.ctor>b__0()
       at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
    42601: error de sintaxis en o cerca de «[»

    Quiero saber si con otras bases de datos pasa igual porque sinceramente mi idea es hacer aplicaciones ASP.NET Core pero no pienso usar SQL Server entonces si me da todos estos problemas usar PostgreSQL o MySQL pues sinceramente estoy pensando en pasar de desarrollar aplicaciones web con ASP.NET Core.

    martes, 19 de marzo de 2019 13:03