Skip to content

Instantly share code, notes, and snippets.

@TristanOrta
Created October 9, 2024 17:57
Show Gist options
  • Save TristanOrta/65652d9ae32df1df6c14734685ed275b to your computer and use it in GitHub Desktop.
Save TristanOrta/65652d9ae32df1df6c14734685ed275b to your computer and use it in GitHub Desktop.
Conexión de Entity Framework Core con Oracle en una Aplicación MAUI / Connecting Entity Framework Core to Oracle in a MAUI Application

Conexión de Entity Framework Core con Oracle en una Aplicación MAUI

En este documento se mostrará cómo conectar Entity Framework Core con Oracle como base de datos utilizando una aplicación MAUI. En este ejemplo, se utilizará .NET 8.

Paso 1: Crear una Aplicación MAUI

Primero, se debe crear una aplicación MAUI.

Paso 2: Instalar Librerías

Instalaremos las siguientes librerías a través del gestor de paquetes NuGet:

  • Microsoft.EntityFrameworkCore
  • Oracle.EntityFrameworkCore

Paso 3: Crear Modelos

Creamos una carpeta llamada Modelos en nuestro proyecto y aquí creamos nuestros modelos de las tablas de la base de datos. A continuación se muestra un modelo Empresa:

namespace TerminalDBContext.Modelos
{
    public partial class Empresa
    {
        public int Id_empresa { get; set; }
        public string? RfcEmpresa { get; set; }
        public string? NombEmpresa { get; set; }
    }
}

Paso 4: Crear el Contexto de Base de Datos

Posteriormente, generamos una carpeta llamada DataAccess. Dentro de ella, crearemos una clase que llamaremos OraDBContext, que se verá así:

using TerminalDBContext.Modelos; // Importa el espacio de nombres donde se encuentran los modelos.
using Microsoft.EntityFrameworkCore; // Importa el espacio de nombres para Entity Framework Core.

namespace TerminalDBContext.DataAccess // Define el espacio de nombres para la clase de acceso a datos.
{
    public partial class OraDbContext : DbContext // Declara una clase parcial que hereda de DbContext.
    {
        public OraDbContext() // Constructor por defecto.
        {
        }

        public OraDbContext(DbContextOptions<OraDbContext> options) // Constructor que acepta opciones de configuración.
            : base(options) // Llama al constructor base con las opciones proporcionadas.
        {
        }

        public virtual DbSet<Empresa> Empresas { get; set; } = null!; // Propiedad que representa el conjunto de entidades 'Empresa'.

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) // Método para configurar opciones del contexto.
        {
            if (!optionsBuilder.IsConfigured) // Verifica si el contexto ya está configurado.
            {
                // Configura el contexto para usar una base de datos Oracle con la cadena de conexión proporcionada.
                optionsBuilder.UseOracle("User Id=Root;Password=Pass;Data Source=//192.144.15.202:1520/OraDB.WORLD; pooling=false;");
            }
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder) // Método para configurar el modelo de la base de datos.
        {
            modelBuilder.HasDefaultSchema("Root"); // Establece el esquema predeterminado para las entidades.

            modelBuilder.Entity<Empresa>(entity => // Configura la entidad 'Empresa'.
            {
                entity.HasKey(e => e.Id_empresa); // Define la clave primaria para la entidad.

                entity.ToTable("EMPRESA"); // Especifica el nombre de la tabla en la base de datos.

                entity.Property(e => e.Id_empresa) // Configura la propiedad 'Id_empresa'.
                    .HasPrecision(6) // Define la precisión del tipo de dato.
                    .ValueGeneratedNever() // Indica que el valor no será generado automáticamente por la base de datos.
                    .HasColumnName("Id_empresa"); // Especifica el nombre de la columna en la tabla.

                entity.Property(e => e.NombEmpresa) // Configura la propiedad 'NombEmpresa'.
                    .HasMaxLength(80) // Define la longitud máxima del campo.
                    .IsUnicode(false) // Indica que el campo no es Unicode.
                    .HasColumnName("NOMB_EMPRESA"); // Especifica el nombre de la columna en la tabla.

                entity.Property(e => e.RfcEmpresa) // Configura la propiedad 'RfcEmpresa'.
                    .HasMaxLength(20) // Define la longitud máxima del campo.
                    .IsUnicode(false) // Indica que el campo no es Unicode.
                    .HasColumnName("RFC_EMPRESA"); // Especifica el nombre de la columna en la tabla.
            });

            OnModelCreatingPartial(modelBuilder); // Llama a un método parcial para configuraciones adicionales.
        }

        partial void OnModelCreatingPartial(ModelBuilder modelBuilder); // Método parcial que puede ser implementado en otra parte.
    }
}

Paso 5: Agregar el ListView en MainPage.xaml

En MainPage.xaml, agregamos el siguiente código:

<ListView x:Name="lvEmpresa">
    <ListView.ItemTemplate>
        <DataTemplate>
            <TextCell Text="{Binding Id_empresa}" Detail="{Binding NombEmpresa}" />
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

Paso 6: Configurar MainPage.xaml.cs

Después, en MainPage.xaml.cs, agregamos el siguiente código:

public partial class MainPage : ContentPage // Declara una clase parcial 'MainPage' que hereda de 'ContentPage'.
{
    private readonly OraDbContext _dbcontext; // Declara un campo privado y de solo lectura para el contexto de la base de datos.

    public MainPage(OraDbContext dbcontext) // Constructor de la clase que recibe una instancia de 'OraDbContext'.
    {
        _dbcontext = dbcontext; // Asigna el contexto recibido al campo privado.
        InitializeComponent(); // Inicializa los componentes de la interfaz de usuario definidos en el archivo XAML asociado.

        lvEmpresa.ItemsSource = _dbcontext.Empresas.Where(e => e.Id_empresa == 2); // Configura la fuente de datos de lvEmpresa.
    }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment