[Volver a publicar] Usar Entity Framework Core para acceder a la base de datos (artículo de Oracle) Usar Entity Framework Core para acceder a la base de datos (artículo de Oracle) Migración de la base de datos de Entity Framework Core

Use Entity Framework Core para acceder a la base de datos (artículos de Oracle)

 
https: // www.cnblogs.com/GuZhenYin/p/10756548.html

 

Prólogo

Wow . Ha pasado mucho tiempo desde que he estado blogueando durante casi un año.

Recientemente, he estado ocupado con varios asuntos internos y nuevos marcos de la empresa, y finalmente me tomé el tiempo para actualizar una ola.

Este artículo habla principalmente sobre el pozo de minería de Entity Framework Core para acceder a la base de datos Oracle. .

Para enfatizar, el dll oficial de Oracle sobre Entity Framework Core que accede a la base de datos Oracle no se ha publicado oficialmente antes de que se publique este artículo.

Pero lo he usado en el proyecto. . Los hermanos conscientes pueden esperar primero. . Oracle está hablando sobre el tercer trimestre de este año. .

 

Medio ambiente

1. Entornos compatibles en la documentación oficial

Primero echemos un vistazo al llamado soporte oficial.

Sistema operativo:

1. Windows x64
  1.1Windows 8.1 (ediciones Pro y Enterprise)
  1.2Windows 10 x64 ( ediciones Pro, Enterprise y Education)
  1.3Windows Server 2012 R2 x64 (Standard, Datacenter, Essentials y FoundationEditions)
  1.4Windows Server 2016 x64 (Standard y Datacenter Editions)
2.Linux x64
  2.1Oracle Linux 7
  2.2Red Hat Enterprise Linux 7


Versión .NET:
  1.NET Core 2.1 o superior
  2.NET Framework 4.6.1 o superior


· Versión de Entity Framework Core:
  1. versión 2.1 o superior


Biblioteca de dependencias:
  1. ODP.NET Core 18.3 o superior
  2. Microsoft.EntityFrameworkCore.Relational 2.1 o superior
  3.Acceso a Oracle Database 11g Release 2 (11.2) o superior

 

Texto

 

Este artículo tomará la forma de CodeFirst para crear una base de datos. .

1. Crear una base de datos

Creamos el contexto y las entidades de la siguiente manera:

Código de copia
    bloggingContext de clase pública: DbContext 
    { 
        public DbSet <Blog> Blogs {get; conjunto; } 
        Publicaciones públicas de DbSet <Post> {get; conjunto; } 

        anulación de anulación protegida OnConfiguring (DbContextOptionsBuilder optionsBuilder) 
        { 
            optionsBuilder.UseOracle (@ "SQL Contion", b => b.UseOracleSQLCompatibility ("11")); 
        } 

        anulación protegida anular OnModelCreating (ModelBuilder modelBuilder) 
        { 

        } 
    } 

    blog de clase 
        pública 
    { public int BlogId {get; conjunto; } 
        URL de cadena pública {get; conjunto; } 
        // public int Rating {get; conjunto; } 
        Publicaciones de la lista pública <Post> {get; conjunto; } 
    }

    clase pública Post 
    { 
        public int PostId {get; conjunto; } 
        título de cadena pública {get; conjunto; } 
        Contenido de cadena pública {get; conjunto; } 

        public Int BlogId {get; conjunto; } 
        blog público Blog {get; conjunto; } 
    }
Código de copia

Aquí presentamos primero el primer punto a tener en cuenta, el método UseOracleSQLCompatibility en el parámetro UseOracle , el parámetro pasado en 11, se refiere a la versión Oracle11g. Si tiene una versión de 12 g, pase 12.

Debido a que la sintaxis SQL de 11g y 12g tiene más diferencias, use esto para distinguir.

 

Luego, agregamos una versión para ejecutar el comando nuget de la siguiente manera: (PD: si no sabe cómo usar codeFirst, mueva: Migración de la base de datos de Entity Framework Core )

Add-Migration BanBen1

Luego actualice la versión a la base de datos de la siguiente manera:

Actualizar base de datos

La base de datos se genera con éxito.

 

2. Pit sobre la secuencia del oráculo

Ahora escribimos la declaración de inserción de la siguiente manera:

utilizando (BloggingContext db = new BloggingContext ()) 
            { 
                db.Blogs.Add (new Blog {Url = "aaaaa1"}); 
                db.SaveChanges (); 
            }

Aparentemente no hay declaración de problema, recibirá un mensaje de error de la siguiente manera:

El índice estaba fuera de rango. Debe ser no negativo y menor que el tamaño de la colección.
Nombre del parámetro: índice

Esto se debe a que no proporcionamos el mensaje de error causado por la asignación de la clave primaria. (Debido a que Oracle no incrementa la clave primaria, solo puede incrementar por secuencia)

Entonces, ¿cómo usar la secuencia de incremento automático?

Encontraremos la base de datos, como se muestra en la figura:

codefirst ha generado la secuencia para nosotros, pero no se usará automáticamente. Necesitamos configurar:

Agregue el siguiente código al método OnModelCreating en el contexto:

Código de copia
anulación protegida anular OnModelCreating (ModelBuilder modelBuilder) 
        { 
            modelBuilder.Entity <Post> (entity => 
            { 
                entity.ToTable ("Posts"); 
                entity.Property (o => o.PostId) .ForOracleUseSequenceHiLo ("Posts_PostId_sq3"); 

            }) ; 
            modelBuilder.Entity <Blog> (entity => 
            { 
                entity.ToTable ("Blogs"); 
                entity.Property (o => o.BlogId) .ForOracleUseSequenceHiLo ("Blogs_BlogId_sq1"); 

            }); 
        }
Código de copia

Especifique la secuencia de la tabla de correspondencia.

Entonces corriendo. Puedes agregarlo con éxito.

 

3. Sobre los pozos desplegados en Docker

En mi proyecto de producción. Debe empaquetarse en la ventana acoplable para ejecutarse e implementarse directamente.

Pero en el proceso de empaquetado a la ventana acoplable, aparecieron nuevamente problemas extraños.

No será reproducido. . De todos modos, no hay problema con el entorno de desarrollo. . No hay problema para ponerlo directamente en Linux. Pero una vez empaquetados para la operación de acoplamiento, los datos no serán consultados.

Después de muchas verificaciones, finalmente se descubrió que el espejo rumtime proporcionado por Microsoft era un problema debido al sistema de versión reducida.

Agregue la siguiente instrucción al dockerfile para establecer la zona horaria al generar:

DE microsoft / dotnet: 2.1-aspnetcore-runtime 
ENV TZ = Asia / Shanghai

Esto puede operar con éxito a la base de datos. .

 

 

Conclusión

Recientemente, he trasplantado varios proyectos a .NET CORE y encontré más o menos pozos. . Debe contarse como innumerables hoyos. .

De hecho, la mayoría de ellos se concentran en la conexión de la base de datos. . Por ejemplo, Oracle DB2. . (PD: Siento que el soporte de servidor mysql y sql es el mejor ...)

Aunque DB2 se lanza oficialmente. Pero su pozo es en realidad más grande que el oráculo. . Estamos escribiendo a continuación. .

Autor: Gu India Fuente: http: //www.cnblogs.com/GuZhenYin/ Si cree que ha leído este artículo de ayuda, por favor haga clic en el botón de "recomendar", su "recomendado" será mi mayor potencia de escritura! Los derechos de autor de este artículo pertenecen al autor y al jardín del blog, bienvenido a reimprimir, pero sin el consentimiento del autor debe conservar esta declaración de párrafo, y en la página del artículo
 
Categoría:  Marco de entidad
Prólogo

Wow . Ha pasado mucho tiempo desde que he estado blogueando durante casi un año.

Recientemente, he estado ocupado con varios asuntos internos y nuevos marcos de la empresa, y finalmente me tomé el tiempo para actualizar una ola.

Este artículo habla principalmente sobre el pozo de minería de Entity Framework Core para acceder a la base de datos Oracle. .

Para enfatizar, el dll oficial de Oracle sobre Entity Framework Core que accede a la base de datos Oracle no se ha publicado oficialmente antes de que se publique este artículo.

Pero lo he usado en el proyecto. . Los hermanos conscientes pueden esperar primero. . Oracle está hablando sobre el tercer trimestre de este año. .

 

Medio ambiente

1. Entornos compatibles en la documentación oficial

Primero echemos un vistazo al llamado soporte oficial.

Sistema operativo:

1. Windows x64
  1.1Windows 8.1 (ediciones Pro y Enterprise)
  1.2Windows 10 x64 ( ediciones Pro, Enterprise y Education)
  1.3Windows Server 2012 R2 x64 (Standard, Datacenter, Essentials y FoundationEditions)
  1.4Windows Server 2016 x64 (Standard y Datacenter Editions)
2.Linux x64
  2.1Oracle Linux 7
  2.2Red Hat Enterprise Linux 7


Versión .NET:
  1.NET Core 2.1 o superior
  2.NET Framework 4.6.1 o superior


· Versión de Entity Framework Core:
  1. versión 2.1 o superior


Biblioteca de dependencias:
  1. ODP.NET Core 18.3 o superior
  2. Microsoft.EntityFrameworkCore.Relational 2.1 o superior
  3.Acceso a Oracle Database 11g Release 2 (11.2) o superior

 

Texto

 

Este artículo tomará la forma de CodeFirst para crear una base de datos. .

1. Crear una base de datos

Creamos el contexto y las entidades de la siguiente manera:

Código de copia
    bloggingContext de clase pública: DbContext 
    { 
        public DbSet <Blog> Blogs {get; conjunto; } 
        Publicaciones públicas de DbSet <Post> {get; conjunto; } 

        anulación de anulación protegida OnConfiguring (DbContextOptionsBuilder optionsBuilder) 
        { 
            optionsBuilder.UseOracle (@ "SQL Contion", b => b.UseOracleSQLCompatibility ("11")); 
        } 

        anulación protegida anular OnModelCreating (ModelBuilder modelBuilder) 
        { 

        } 
    } 

    blog de clase 
        pública 
    { public int BlogId {get; conjunto; } 
        URL de cadena pública {get; conjunto; } 
        // public int Rating {get; conjunto; } 
        Publicaciones de la lista pública <Post> {get; conjunto; } 
    }

    clase pública Post 
    { 
        public int PostId {get; conjunto; } 
        título de cadena pública {get; conjunto; } 
        Contenido de cadena pública {get; conjunto; } 

        public Int BlogId {get; conjunto; } 
        blog público Blog {get; conjunto; } 
    }
Código de copia

Aquí presentamos primero el primer punto a tener en cuenta, el método UseOracleSQLCompatibility en el parámetro UseOracle , el parámetro pasado en 11, se refiere a la versión Oracle11g. Si tiene una versión de 12 g, pase 12.

Debido a que la sintaxis SQL de 11g y 12g tiene más diferencias, use esto para distinguir.

 

Luego, agregamos una versión para ejecutar el comando nuget de la siguiente manera: (PD: si no sabe cómo usar codeFirst, mueva: Migración de la base de datos de Entity Framework Core )

Add-Migration BanBen1

Luego actualice la versión a la base de datos de la siguiente manera:

Actualizar base de datos

La base de datos se genera con éxito.

 

2. Pit sobre la secuencia del oráculo

Ahora escribimos la declaración de inserción de la siguiente manera:

utilizando (BloggingContext db = new BloggingContext ()) 
            { 
                db.Blogs.Add (new Blog {Url = "aaaaa1"}); 
                db.SaveChanges (); 
            }

Aparentemente no hay declaración de problema, recibirá un mensaje de error de la siguiente manera:

El índice estaba fuera de rango. Debe ser no negativo y menor que el tamaño de la colección.
Nombre del parámetro: índice

Esto se debe a que no proporcionamos el mensaje de error causado por la asignación de la clave primaria. (Debido a que Oracle no incrementa la clave primaria, solo puede incrementar por secuencia)

Entonces, ¿cómo usar la secuencia de incremento automático?

Encontraremos la base de datos, como se muestra en la figura:

codefirst ha generado la secuencia para nosotros, pero no se usará automáticamente. Necesitamos configurar:

Agregue el siguiente código al método OnModelCreating en el contexto:

Código de copia
anulación protegida anular OnModelCreating (ModelBuilder modelBuilder) 
        { 
            modelBuilder.Entity <Post> (entity => 
            { 
                entity.ToTable ("Posts"); 
                entity.Property (o => o.PostId) .ForOracleUseSequenceHiLo ("Posts_PostId_sq3"); 

            }) ; 
            modelBuilder.Entity <Blog> (entity => 
            { 
                entity.ToTable ("Blogs"); 
                entity.Property (o => o.BlogId) .ForOracleUseSequenceHiLo ("Blogs_BlogId_sq1"); 

            }); 
        }
Código de copia

Especifique la secuencia de la tabla de correspondencia.

Entonces corriendo. Puedes agregarlo con éxito.

 

3. Sobre los pozos desplegados en Docker

En mi proyecto de producción. Debe empaquetarse en la ventana acoplable para ejecutarse e implementarse directamente.

Pero en el proceso de empaquetado a la ventana acoplable, aparecieron nuevamente problemas extraños.

No será reproducido. . De todos modos, no hay problema con el entorno de desarrollo. . No hay problema para ponerlo directamente en Linux. Pero una vez empaquetados para la operación de acoplamiento, los datos no serán consultados.

Después de muchas verificaciones, finalmente se descubrió que el espejo rumtime proporcionado por Microsoft era un problema debido al sistema de versión reducida.

Agregue la siguiente instrucción al dockerfile para establecer la zona horaria al generar:

DE microsoft / dotnet: 2.1-aspnetcore-runtime 
ENV TZ = Asia / Shanghai

Esto puede operar con éxito a la base de datos. .

 

 

Conclusión

Recientemente, he trasplantado varios proyectos a .NET CORE y encontré más o menos pozos. . Debe contarse como innumerables hoyos. .

De hecho, la mayoría de ellos se concentran en la conexión de la base de datos. . Por ejemplo, Oracle DB2. . (PD: Siento que el soporte de servidor mysql y sql es el mejor ...)

Aunque DB2 se lanza oficialmente. Pero su pozo es en realidad más grande que el oráculo. . Estamos escribiendo a continuación. .

Supongo que te gusta

Origin www.cnblogs.com/jinanxiaolaohu/p/12698532.html
Recomendado
Clasificación