Conexión a Base de Datos con Entity Framework Code First

Para establecer una conexión a base de datos usando Entity Framework Code First, se requieren varios pasos clave que cubren desde la instalación hasta la configuración avanzada del contexto de datos.

  1. Instalación de Antity Framework

Para agregar Entity Framework al proyecto, se utiliza el administrador de paquetes NuGet. Desde la consola del administrador de paquetes (Tools → Library Package Manager → Package Manager Console), se ejecuta el siguiente comando:

PM> Install-Package EntityFramework
  1. Configuración de la conexión

Tras la instalación, se añade automáticamente un archivo App.config con la sección de configuración de Entity Framework. A continuación, se muestra un ejemplo de cómo se define la conexión usando defaultConnectionFactory:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="Data Source=(local); Database=Portal; User ID=sa; Password=; MultipleActiveResultSets=True" />
      </parameters>
    </defaultConnectionFactory>
  </entityFramework>
</configuration>

Una configuración alternativa es usar la sección connectionStrings estándar de .NET:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="PortalContext" connectionString="Data Source=(local); Database=Portal; User ID=sa; Password=; MultipleActiveResultSets=True"
      providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>
  1. Definición del DbContext

Se crea una clase que hereda de DbContext, donde se configura el inicializador de la base de datos y se especifica la cadena de conexión definida en el archivo de configuración. A continuación, un ejemplo completo con opciones avanzadas:

using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;

namespace Portal
{
    public class PortalContext : DbContext
    {
        // Constructor estático para definir la política de inicialización de la base de datos
        static PortalContext()
        {
            // Deshabilitar la inicialización automática para evitar la creación/modificación de la BD
            Database.SetInitializer<PortalContext>(null);
        }

        public PortalContext()
            : base("name=PortalContext")
        {
            // Desactivar la carga diferida (lazy loading)
            this.Configuration.LazyLoadingEnabled = false;
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            // Eliminar la convención de pluralización en nombres de tablas
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

            // Deshabilitar la eliminación en cascada en relaciones uno a muchos
            modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();

            // Deshabilitar la eliminación en cascada en relaciones muchos a muchos
            modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
        }
    }
}
  1. Estrategias de inicialización de la base de datos

Entity Framework ofrece varios modos de inicialización que se definen mediante Database.SetInitializer. Las opciones más comunes son:

  • CreateDatabaseIfNotExists: Crea la base de datos solo si no existe. Es el comportamiento predeterminado.
  • DropCreateDatabaseIfModelChanges: Elimina y recrea la base de datos si el modelo ha cambiado.
  • DropCreateDatabaseAlways: Elimina y recrea la base de datos en cada inicio, independientemente de los cambios.

Para evitar cualquier modificación no deseada en la base de datos, se puede desactivar completamente la inicialización:

Database.SetInitializer<PortalContext>(null);
  1. Configuraciones adicionales del DbContext

Dentro del constructor de PortalContext y en el método OnModelCreating, se pueden ajustar comportamientos importantes:

4.1 Desactivar la carga diferida

La carga diferida permite que las propiedades de navegación se carguen automáticamente al ser accedidas. Para desactivarla, se usa:

this.Configuration.LazyLoadingEnabled = false;

4.2 Deshabilitar la eliminación en cascada

Para evitar que Entity Framework aplique borrados en cascada en relaciones uno a muchos o muchos a muchos, se eliminan las convenciones correspondientes en OnModelCreating:

modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();

4.3 Desactivar la pluralización automática de nombres de tablas

Por defecto, Entity Framework asigna nombres de tablas en plural a partir de los nombres de las clases. Para usar nombres exactos (singular), se elimina la convención:

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

Estas configuraciones permiten un control más preciso sobre cómo Entity Framework interactúa con la base de datos, garantizando un comportamiento predecible y acorde a los requisitos del proyecto.

Etiquetas: Entity Framework Code First DbConnection App.config DbContext

Publicado el 7-20 17:07