Marco de entidad maestra:50 preguntas y respuestas clave de la entrevista (2026)
Prepararse para una entrevista de Entity Framework significa anticipar las preguntas que descubren la capacidad real. Las preguntas de la entrevista de Entity Framework revelan el pensamiento, la conciencia del desempeño y cómo los candidatos traducen los conceptos en la práctica.
Dominar Entity Framework abre roles en todo el desarrollo moderno, desde plataformas basadas en datos hasta servicios en la nube. La exposición práctica desarrolla la capacidad analítica, fortalece la profundidad técnica y apoya a los equipos. Los líderes de contratación valoran la resolución práctica de problemas, el diseño escalable, la tutoría de jóvenes y las vías de crecimiento para los recién graduados.
Leer más…👉 Descarga gratuita de PDF:Preguntas y respuestas de la entrevista de Entity Framework
1) ¿Qué es Entity Framework y por qué se utiliza?
Entity Framework (EF) es el marco ORM (Object-Relational Mapping) de Microsoft para .NET que simplifica la interacción de la base de datos al permitir a los desarrolladores trabajar con datos como objetos .NET fuertemente tipados en lugar de SQL sin formato . Esta abstracción permite a los desarrolladores realizar operaciones CRUD (Crear, Leer, Actualizar, Eliminar) utilizando construcciones familiares de C#, y el marco se encarga de traducir estas operaciones en consultas SQL optimizadas bajo el capó. EF reduce el código repetitivo de acceso a datos, mejora la capacidad de mantenimiento y ayuda a aplicar la seguridad de tipos en tiempo de compilación.
Por ejemplo, en lugar de escribir SQL, puedes usar:
var customers = context.Customers.Where(c => c.IsActive).ToList();
EF traducirá esta consulta LINQ a SQL, la ejecutará en la base de datos y devolverá los resultados como objetos.
2) Explique la diferencia entre los enfoques Code First, Database First y Model First.
Entity Framework admite tres enfoques de desarrollo principales:
Cada enfoque sirve para diferentes escenarios:Codificar primero es popular en el desarrollo ágil, Database First se prefiere con bases de datos heredadas y Model First Se adapta a casos en los que el modelado visual es importante.
3) ¿Qué es DbContext y qué papel juega en EF?
DbContext es la clase principal que gestiona la sesión con la base de datos , rastrea los cambios de entidad y coordina el guardado de datos en la base de datos. Representa un puente entre su aplicación C# y la base de datos. A través de DbContext , usted define DbSet<TEntity> propiedades, que representan colecciones de entidades y se asignan a tablas en la base de datos.
Ejemplo:
public class AppDbContext : DbContext
{
public DbSet<Product> Products { get; set; }
}
Aquí, Products actúa como una colección para realizar operaciones CRUD. EF usa este contexto para seguir estados de objetos y generar comandos SQL en SaveChanges() .
4) ¿Qué son las migraciones en Entity Framework y cómo se usan?
Migraciones son un mecanismo para rastrear y aplicar cambios de esquema a la base de datos a lo largo del tiempo. A medida que su modelo evoluciona, las migraciones ayudan a mantener la base de datos sincronizada sin modificar manualmente los scripts SQL. Con Code First, usas comandos como:
Add-Migration InitialCreate Update-Database
Esto genera clases de migración que definen cambios de esquema y los aplica a la base de datos. Las migraciones permiten el control de versiones del esquema de la base de datos y facilitan el desarrollo colaborativo.
5) Describe la carga diferida, la carga ansiosa y la carga explícita.
Cargar datos relacionados de manera eficiente es fundamental en EF. Aquí tienes una comparación:
.Include() Úselo cuando sepa que necesita datos relacionados.Carga explícita Cargado manualmente después de la consulta Proporciona control sobre exactamente cuándo se cargan los datos relacionados. Por ejemplo:
var orders = context.Orders.Include(o => o.Customer).ToList(); // Eager
La carga diferida ayuda a reducir las consultas iniciales, pero puede causar N+1 problemas de consulta si no se usa con cuidado.
6) ¿Qué es el seguimiento de cambios en Entity Framework?
El seguimiento de cambios es el mecanismo interno de EF para monitorear los cambios de estado de la entidad después de ejecutar una consulta. Cuando una entidad es recuperada por DbContext , está rastreado. Se anota cualquier modificación en sus propiedades y cuando SaveChanges() se llama, EF genera el SQL apropiado INSERT , UPDATE , o DELETE declaraciones. Para escenarios de solo lectura donde el seguimiento no es necesario, AsNoTracking() mejora el rendimiento al desactivar el seguimiento de cambios.
7) ¿Cómo maneja Entity Framework los conflictos de concurrencia?
El control de concurrencia garantiza que varios usuarios que actualizan los mismos datos no sobrescriban involuntariamente los cambios de los demás. EF utiliza concurrencia optimista por defecto. Un enfoque común implica agregar un token de simultaneidad (como un RowVersion marca de tiempo). EF verifica este token durante SaveChanges() , y si difiere de la versión de la base de datos, un DbUpdateConcurrencyException se lanza, lo que indica un conflicto. Luego, los desarrolladores pueden manejar esta excepción para volver a intentarlo o resolver diferencias de datos.
8) ¿Qué son las propiedades de navegación en EF?
Las propiedades de navegación definen las relaciones entre entidades. Permiten a EF navegar por asociaciones (por ejemplo, uno a muchos) sin uniones manuales:
public class Order
{
public int Id { get; set; }
public Customer Customer { get; set; }
}
Aquí, Customer es una propiedad de navegación que vincula Order a su Customer relacionado . EF usa estas propiedades para construir relaciones y unirse automáticamente durante las consultas. Las propiedades de navegación funcionan junto con las claves externas para modelar relaciones.
9) ¿Cuál es el propósito de AsNoTracking()?
AsNoTracking() deshabilita el seguimiento de cambios para una consulta, lo cual es beneficioso para solo lectura operaciones en las que no tiene intención de actualizar las entidades recuperadas. Esto mejora el rendimiento al reducir el uso de memoria y la sobrecarga de seguimiento. Es especialmente útil cuando se obtienen grandes conjuntos de datos sin modificarlos.
10) ¿Qué son las consultas compiladas y cuándo deberías usarlas?
Las consultas compiladas son una técnica de optimización del rendimiento. Cuando se ejecuta una consulta LINQ, EF normalmente la traduce a SQL cada vez. Con las consultas compiladas, esta traducción se realiza una vez y el delegado resultante se reutiliza, lo que reduce la sobrecarga de consultas complejas o ejecutadas con frecuencia. Úselos en alto tráfico escenarios donde la misma consulta se ejecuta repetidamente con diferentes parámetros.
11) ¿Qué son los estados de entidad en Entity Framework y cómo afectan a SaveChanges()?
Entity Framework rastrea el estado de cada entidad para determinar qué operación de base de datos realizar durante SaveChanges() . Los principales estados de la entidad son:
INSERT Modificado Entidad existente actualizadaUPDATE Eliminado Entidad marcada para eliminaciónDELETE Sin cambios No se detectaron cambiosNingunoSeparado No rastreado por contexto Ninguno
Cuando llamas al SaveChanges() , EF inspecciona los estados de la entidad y ejecuta los comandos SQL correspondientes. Por ejemplo, una nueva entidad agregada a un DbSet se marcará Agregado , lo que resulta en un INSERT consulta.
Ejemplo:
context.Entry(product).State = EntityState.Modified; context.SaveChanges();
Esto actualiza explícitamente el registro de la base de datos de la entidad.
Comprender los estados garantiza un mejor control sobre la sincronización y el rendimiento de los datos.
12) ¿Cuáles son las ventajas y desventajas de utilizar Entity Framework?
Entity Framework ofrece importantes beneficios, pero también algunas compensaciones, según su caso de uso.
Para sistemas a gran escala que requieren el máximo rendimiento, los desarrolladores aún pueden mezclar SQL sin formato con EF para optimización.
13) ¿Cómo maneja Entity Framework las relaciones (uno a uno, uno a muchos, muchos a muchos)?
Entity Framework gestiona las relaciones a través de propiedades de navegación y asociaciones clave extranjeras .
Los tipos de relaciones son:
User ↔ UserProfile Uno a muchos Una entidad se relaciona con varias otras.Customer → Orders Muchos a muchos Varias entidades se relacionan entre sí.Student ↔ Course Ejemplo de uno a muchos relación:
public class Customer
{
public int CustomerId { get; set; }
public ICollection<Order> Orders { get; set; }
}
EF genera automáticamente claves externas y maneja reglas de eliminación en cascada dependiendo de la configuración.
También puedes utilizar API fluida para un mapeo de relaciones más explícito.
14) ¿Cuál es la diferencia entre LINQ to Entities y LINQ to SQL?
LINQ a entidades es parte de Entity Framework y es más versátil, mientras que LINQ to SQL está limitado a SQL Server y casos de uso más simples.
Por lo tanto, se recomienda LINQ to Entities para el desarrollo a nivel empresarial.
15) ¿Cuál es la diferencia entre ObjectContext y DbContext?
DbContext envuelve internamente ObjectContext pero proporciona una API más limpia e intuitiva. La mayoría de las aplicaciones .NET actuales deberían usar DbContext .
16) Explicar el ciclo de vida de una entidad en Entity Framework.
El ciclo de vida de una entidad describe sus transiciones de estado de la creación a la persistencia:
- Creación – Se crea una instancia de la entidad en la memoria (estado:Separado ).
- Adjunto – Agregado al contexto a través de
DbSet.Add()(estado:Agregado ). - Modificación – Cambios detectados automáticamente (estado:Modificado ).
- Persistencia –
SaveChanges()llamado → Comandos SQL ejecutados. - Eliminación – Entidad marcada como Eliminada y eliminado de la base de datos.
Comprender este ciclo de vida ayuda a depurar problemas de datos y optimizar la administración del contexto de EF.
17) ¿Cuál es el uso de Fluent API en Entity Framework?
La API fluida proporciona una forma programática de configurar relaciones, restricciones y asignaciones del modelo, que se utiliza a menudo en OnModelCreating(). método de su DbContext .
Proporciona un control detallado sobre las configuraciones que anotaciones de datos no puedo expresar.
Ejemplo:
modelBuilder.Entity<Customer>() .HasMany(c => c.Orders) .WithOne(o => o.Customer) .HasForeignKey(o => o.CustomerId);
Fluent API es particularmente potente para configurar claves compuestas , relaciones de muchos a muchos y reglas en cascada .
18) ¿Qué son las anotaciones de datos en Entity Framework?
Las anotaciones de datos son atributos Se aplica directamente a clases o propiedades de modelo para definir el comportamiento del esquema. Son más simples que Fluent API pero menos flexibles.
Ejemplo:
public class Product
{
[Key]
public int ProductId { get; set; }
[Required]
[StringLength(50)]
public string Name { get; set; }
}
Las anotaciones definen claves, longitudes de cadenas, campos obligatorios y relaciones. Para casos avanzados, los desarrolladores suelen combinar Anotaciones de datos y API fluida .
19) ¿Cuál es la diferencia entre entidades con seguimiento y sin seguimiento en EF Core?
DbContext para cambios.Comportamiento predeterminado para actualizaciones.Entidades sin seguimiento No monitoreado; recuperado con .AsNoTracking() .Ideal para operaciones de sólo lectura. Las entidades rastreadas consumen más memoria pero permiten que EF detecte cambios automáticamente.
Las entidades sin seguimiento mejoran el rendimiento en escenarios de alta lectura y baja actualización.
20) ¿Cómo se pueden ejecutar consultas SQL sin formato en Entity Framework?
Entity Framework permite ejecutar SQL sin formato para consultas personalizadas o de rendimiento crítico.
var result = context.Products
.FromSqlRaw("SELECT * FROM Products WHERE Price > 100")
.ToList();
Para comandos que no son de consulta:
context.Database.ExecuteSqlRaw("DELETE FROM Products WHERE Discontinued = 1"); Utilice esta función con cuidado para evitar la inyección SQL y mantenga la flexibilidad independiente de la base de datos.
21) ¿Cuál es la diferencia entre Entity Framework y Entity Framework Core?
Entity Framework (EF) y Entity Framework Core (EF Core) difieren en arquitectura, capacidades y soporte multiplataforma.
EF Core es el moderno y desarrollado activamente versión y la opción recomendada para nuevos proyectos .NET debido a su flexibilidad y rendimiento.
22) ¿Cómo funcionan las transacciones en Entity Framework?
Las transacciones en Entity Framework garantizan la integridad de los datos cuando varias operaciones deben tener éxito o fracasar juntas. De forma predeterminada, EF envuelve SaveChanges() dentro de una transacción. Para control manual:
using (var transaction = context.Database.BeginTransaction())
{
try
{
context.Customers.Add(new Customer());
context.SaveChanges();
context.Orders.Add(new Order());
context.SaveChanges();
transaction.Commit();
}
catch
{
transaction.Rollback();
}
}
Esto garantiza la atomicidad:si algún comando falla, todos los cambios se revierten.
EF también se integra con System.Transactions para soporte de transacciones distribuidas.
23) Explique las estrategias de herencia de TPH, TPT y TPC en Entity Framework.
Entity Framework admite tres estrategias principales de mapeo de herencia para modelar jerarquías de clases.
La mayoría de los desarrolladores prefieren TPH por su simplicidad, a menos que la normalización o las necesidades de rendimiento indiquen lo contrario.
24) ¿Cómo se maneja el ajuste del rendimiento en Entity Framework?
Para optimizar el rendimiento de Entity Framework:
- Utilice
AsNoTracking()para consultas de solo lectura. - Carga ansiosa sólo las entidades relacionadas necesarias con
.Include(). - Evitar consultas N+1 usando proyecciones o
Select(). - Usar consultas compiladas para operaciones que se ejecutan con frecuencia.
- Lote de múltiples inserciones/actualizaciones con
AddRange()ySaveChanges(). - Desactivar detección automática de cambios para operaciones masivas:
context.Configuration.AutoDetectChangesEnabled = false; - Usar almacenamiento en caché y paginación para grandes conjuntos de datos.
Una implementación de EF bien ajustada puede acercarse al rendimiento de ADO.NET y al mismo tiempo conservar la productividad del desarrollador.
25) ¿Qué es una propiedad oculta en Entity Framework Core?
Una propiedad oculta existe en el modelo EF pero no en la clase de entidad. EF lo mantiene en el rastreador de cambios y lo almacena en la base de datos.
Ejemplo:
modelBuilder.Entity<Order>()
.Property<DateTime>("LastUpdated");
Esto permite a EF almacenar metadatos adicionales (por ejemplo, marcas de tiempo, información de auditoría) sin modificar la clase de entidad.
Puede acceder a las propiedades de la sombra a través de:
var value = context.Entry(order).Property("LastUpdated").CurrentValue; Las propiedades ocultas son ideales para escenarios de registro o auditoría.
26) ¿Qué son los convertidores de valores en EF Core?
Los convertidores de valores en EF Core permiten la transformación de valores de propiedades al leer o escribir en la base de datos.
Por ejemplo, para almacenar una enumeración como una cadena:
modelBuilder.Entity<Employee>() .Property(e => e.Status) .HasConversion( v => v.ToString(), v => (EmployeeStatus)Enum.Parse(typeof(EmployeeStatus), v));
Esto mejora la flexibilidad para tipos de datos personalizados como enum , bool , o DateTimeOffset .
Los convertidores de valores también se utilizan para cifrado, compresión o enmascaramiento. de datos sensibles.
27) ¿Qué son los filtros de consulta globales y cómo funcionan?
Los filtros de consulta globales permiten aplicar condiciones automáticamente a todas las consultas de una entidad.
Esto es especialmente útil para eliminaciones temporales o multiinquilino .
Ejemplo:
modelBuilder.Entity<Employee>() .HasQueryFilter(e => !e.IsDeleted);
Cada consulta ejecutada contra Employee excluye automáticamente los registros eliminados temporalmente, a menos que se anulen explícitamente.
Los filtros globales mejoran la mantenibilidad y la seguridad de los datos.
28) ¿Cómo se puede probar el código de Entity Framework utilizando pruebas unitarias?
Para realizar una prueba unitaria de la lógica de EF sin acceder a una base de datos real, utilice bases de datos en memoria. o burlarse :
- Opción 1:Proveedor InMemory
var options = new DbContextOptionsBuilder<AppDbContext>() .UseInMemoryDatabase("TestDb") .Options; - Opción 2:Simular DbContext
SimulacroDbSetusando bibliotecas como Moq para pruebas aisladas.
Las pruebas unitarias deben validar:
- Corrección de la consulta (a través de LINQ)
- Consistencia de datos después de
SaveChanges() - Lógica del repositorio
Las pruebas con EF Core InMemory garantizan la velocidad y evitan dependencias de SQL Server.
29) Explicar los patrones de Repositorio y Unidad de Trabajo en EF.
Estos dos patrones arquitectónicos ayudan al acceso a datos abstractos y mantener la coherencia transaccional .
IRepository<T> interfaz con Add() , GetAll() , etc.Unidad de trabajo Coordina múltiples repositorios dentro de una transacción.SaveChanges() actúa como un límite de compromiso. Ejemplo:
public class UnitOfWork : IUnitOfWork
{
private readonly AppDbContext _context;
public void Commit() => _context.SaveChanges();
}
Estos patrones mejoran la capacidad de prueba , reutilización de código y separación de preocupaciones en aplicaciones de grandes empresas.
30) ¿Cuál es la diferencia entre carga ansiosa y carga de proyección?
.Include() .Select() Ejemplocontext.Orders.Include(o => o.Customer) context.Orders.Select(o => new { o.Id, o.Customer.Name }) RendimientoObtiene objetos completosObtiene datos mínimosCaso de usoCuando se necesitan entidades relacionadas para el procesamientoCuando necesita datos livianos específicos La carga de proyección es una optimización del rendimiento eso reduce la sobrecarga de memoria al seleccionar solo las columnas necesarias.
31) ¿Qué son los interceptores en Entity Framework Core?
Los interceptores en EF Core permiten a los desarrolladores interceptar y modificar operaciones de bases de datos como ejecución de consultas, creación de comandos y apertura de conexiones. .
Actúan como componentes de middleware entre EF y el proveedor de la base de datos.
Ejemplo: Registrar todos los comandos SQL ejecutados.
public class CommandInterceptor : DbCommandInterceptor
{
public override void ReaderExecuting(
DbCommand command,
CommandEventData eventData,
InterceptionResult<DbDataReader> result)
{
Console.WriteLine($"Executing SQL: {command.CommandText}");
base.ReaderExecuting(command, eventData, result);
}
}
Lo registras en el DbContextOptionsBuilder :
optionsBuilder.AddInterceptors(new CommandInterceptor());
Beneficios:
- Registro mejorado
- Seguridad (validación de consultas)
- Auditoría y seguimiento del rendimiento
32) ¿Cómo maneja EF Core las operaciones asincrónicas?
Entity Framework Core es totalmente compatible con la programación asincrónica a través de métodos como SaveChangesAsync() , ToListAsync() y FirstOrDefaultAsync() .
La ejecución asincrónica ayuda a mejorar la escalabilidad en aplicaciones web liberando subprocesos mientras se esperan operaciones de base de datos vinculadas a E/S.
Ejemplo:
var customers = await context.Customers .Where(c => c.IsActive) .ToListAsync();
Las operaciones asíncronas son particularmente efectivas en API de ASP.NET Core de alto rendimiento. y microservicios, reduciendo el bloqueo de llamadas y mejorando los tiempos de respuesta.
33) ¿Qué es la resiliencia de la conexión en Entity Framework Core?
La resiliencia de la conexión ayuda a que su aplicación se recupere automáticamente de fallas transitorias de la base de datos , como interrupciones de la red o tiempos de espera de SQL.
Se puede configurar de la siguiente manera:
optionsBuilder.UseSqlServer( connectionString, options => options.EnableRetryOnFailure(5, TimeSpan.FromSeconds(10), null) );
Aquí, EF reintentará las operaciones fallidas hasta 5 veces con retrasos.
Esto es particularmente útil en entornos alojados en la nube como Azure SQL, donde las fallas transitorias son comunes.
34) ¿Qué son los tipos de entidades de propiedad en EF Core?
Las entidades de propiedad permiten modelar objetos de valor que dependen completamente del ciclo de vida de otra entidad.
Comparten la misma tabla que su propietario y no pueden existir de forma independiente.
Ejemplo:
public class Address
{
public string Street { get; set; }
public string City { get; set; }
}
public class Customer
{
public int Id { get; set; }
public Address Address { get; set; }
}
Configuración:
modelBuilder.Entity<Customer>().OwnsOne(c => c.Address);
Caso de uso:
Modelado de conceptos como Dirección , Dinero , o Medición que no tienen identidad propia.
35) ¿Cómo se pueden implementar eliminaciones temporales en Entity Framework Core?
Las eliminaciones temporales marcan los registros como eliminados en lugar de eliminarlos físicamente.
Se implementan mediante una bandera booleana y filtros de consulta globales .
modelBuilder.Entity<Employee>() .HasQueryFilter(e => !e.IsDeleted);
En la operación de eliminación:
employee.IsDeleted = true; context.Update(employee); context.SaveChanges();
Ventajas:
- Conservación de datos históricos
- Recuperación más fácil
Desventajas:
- Tablas de bases de datos más grandes
- Requiere una lógica de filtrado cuidadosa
36) ¿Qué es el modelo compilado en EF Core y por qué se usa?
En EF Core 6+, modelos compilados permite la precompilación de los metadatos del modelo EF en un ensamblado .NET, lo que reduce el tiempo de inicio y la sobrecarga del tiempo de ejecución.
Pasos:
- Ejecute el comando:
dotnet ef dbcontext optimize - EF genera un archivo de modelo precompilado que la aplicación carga más rápido en tiempo de ejecución.
Beneficio: Reduce la latencia de inicialización entre un 30% y un 40%, especialmente en aplicaciones grandes con muchas entidades.
Caso de uso: Microservicios de alto rendimiento y entornos sin servidor.
37) ¿Cómo se puede implementar el almacenamiento en caché en Entity Framework?
El almacenamiento en caché ayuda a reducir las consultas repetitivas a la base de datos. Hay dos niveles principales:
DbContext instanciaAdministrado automáticamenteCaché de segundo nivel Caché externo compartido entre contextosUtilice bibliotecas como EFCoreSecondLevelCacheInterceptor Ejemplo de almacenamiento en caché de segundo nivel:
services.AddEFSecondLevelCache(options =>
{
options.UseMemoryCacheProvider().DisableLogging(false);
});
Esto mejora significativamente el rendimiento en aplicaciones con mucha lectura evitando accesos redundantes a bases de datos.
38) ¿Cómo administra EF Core los tokens de simultaneidad y las marcas de tiempo?
Los tokens de simultaneidad evitan actualizaciones conflictivas en entornos multiusuario.
Puede marcar una propiedad como token de concurrencia usando el [ConcurrencyCheck] o [Timestamp] atributo.
Ejemplo:
public class Product
{
public int Id { get; set; }
[Timestamp]
public byte[] RowVersion { get; set; }
}
Cuando se produce una actualización, EF incluye esta columna en el WHERE cláusula.
Si el valor no coincide, un DbUpdateConcurrencyException se lanza:garantiza un control de concurrencia optimista .
39) ¿Cómo se implementa la auditoría (seguimiento creado, modificado y eliminado) en EF Core?
La auditoría rastrea metadatos como quién creó, modificó o eliminó registros.
Puedes anular SaveChanges() :
public override int SaveChanges()
{
var entries = ChangeTracker.Entries()
.Where(e => e.Entity is IAuditable &&
(e.State == EntityState.Added || e.State == EntityState.Modified));
foreach (var entry in entries)
{
var auditable = (IAuditable)entry.Entity;
auditable.LastModified = DateTime.UtcNow;
}
return base.SaveChanges();
}
Interfaz:
public interface IAuditable
{
DateTime Created { get; set; }
DateTime LastModified { get; set; }
}
Este método centraliza la lógica de auditoría, garantizando una gobernanza de datos coherente .
40) ¿Cuáles son las mejores prácticas para usar Entity Framework en aplicaciones empresariales?
AsNoTracking() y proyecciones para consultas de solo lectura. Reduce los gastos generales.Diseño Implementar patrones de Repositorio y Unidad de Trabajo. Mejora la mantenibilidad. Seguridad Utilice consultas parametrizadas para evitar la inyección de SQL. Protección de datos. Escalabilidad Utilice métodos asíncronos y de agrupación de conexiones. Maneja cargas elevadas. Migraciones Utilice migraciones automatizadas con control de versiones. Simplifica la gestión de esquemas.Configuración Externalizar cadenas de conexión y secretos. Mejor aislamiento del entorno.Pruebas Utilice el proveedor InMemory para pruebas unitarias. Ejecuciones de pruebas más rápidas.Registro Habilite el registro de EF para obtener información sobre el rendimiento. Depuración más sencilla. Estas prácticas garantizan una experiencia robusta, escalable y mantenible. aplicaciones creadas en Entity Framework.
41) ¿Cómo se pueden optimizar las consultas LINQ para una mejor traducción de SQL en Entity Framework?
Entity Framework convierte automáticamente consultas LINQ a SQL, pero los patrones ineficientes pueden producir SQL lento o redundante. La optimización de LINQ garantiza que el ORM genere consultas de bases de datos de alto rendimiento.
Técnicas de optimización:
Usar proyecciones:
- Seleccione solo las columnas requeridas en lugar de entidades completas.
var customers = context.Customers
.Select(c => new { c.Id, c.Name })
.ToList();
Evite la evaluación del lado del cliente: Asegúrese siempre de que el filtrado se realice en SQL , no en la memoria. EF Core advierte cuando la evaluación se realiza en el lado del cliente.Utilice
AsNoTracking() para datos de solo lectura.var orders = context.Orders.AsNoTracking().ToList();Aprovechar las consultas compiladas para operaciones LINQ repetidas.Evite
.Include() innecesarios. llamadas — incluya únicamente datos relacionados cuando sea necesario. Ejemplo:
Ineficiente:
context.Customers.ToList().Where(c => c.IsActive);
Eficiente:
context.Customers.Where(c => c.IsActive).ToList();
42) ¿Cuáles son las diferentes formas de inicializar datos iniciales en EF Core?
La siembra de datos garantiza que la base de datos tenga datos predeterminados o de referencia cuando se crea.
Enfoque 1:uso de ModelBuilder
modelBuilder.Entity<Role>().HasData(
new Role { Id = 1, Name = "Admin" },
new Role { Id = 2, Name = "User" }
);
Esto inserta datos automáticamente durante Update-Database .
Enfoque 2:método de semilla personalizado
Ejecute el código manualmente al inicio:
context.Database.Migrate();
if (!context.Users.Any())
{
context.Users.Add(new User { Name = "Admin" });
context.SaveChanges();
}
Enfoque 3:secuencias de comandos SQL
Utilice SQL sin formato en las migraciones:
migrationBuilder.Sql("INSERT INTO Roles (Name) VALUES ('Admin')");
Recomendación:
Utilice HasData() para datos de referencia estáticos y siembra programática para datos de inicio dinámicos.
43) ¿Cómo administra EF Core los proveedores de bases de datos internamente?
EF Core es independiente del proveedor , lo que significa que puede apuntar a múltiples motores de bases de datos a través de paquetes de proveedores de bases de datos separados. .
Proveedores comunes:
Microsoft.EntityFrameworkCore.SqlServer MSSQLSQLiteMicrosoft.EntityFrameworkCore.Sqlite Móvil/EscritorioPostgreSQLNpgsql.EntityFrameworkCore.PostgreSQL PostgreSQLMySQLPomelo.EntityFrameworkCore.MySql Base de datos MySQLCosmosMicrosoft.EntityFrameworkCore.Cosmos No SQL Internamente, EF Core utiliza capas de abstracción para:
- Traducción de consultas
- Generación de comandos SQL
- Asignación de tipos de datos
Cada proveedor implementa sus propias clases heredadas de las abstracciones base de EF Core (por ejemplo, RelationalDatabaseProvider , QuerySqlGenerator ).
44) ¿Qué es una “consulta dividida” y cuándo debería utilizarla?
Las consultas divididas impiden que EF realice uniones grandes y complejas ejecutando múltiples consultas SQL en lugar de una.
Ejemplo:
var customers = context.Customers .Include(c => c.Orders) .AsSplitQuery() .ToList();
Esto ejecuta:
- Consulta 1 → Obtener clientes
- Consulta 2 → Obtener pedidos relacionados con esos clientes
Beneficios:
- Evita productos cartesianos grandes.
- Mejora el rendimiento con grandes conjuntos de datos relacionados.
Desventaja:
Múltiples viajes de ida y vuelta a la base de datos.
Utilice consultas divididas cuando esté ansioso por cargar datos relacionados de gran tamaño que pueden causar problemas de memoria.
45) ¿Cómo se pueden monitorear eficazmente los comandos SQL generados por EF?
La supervisión de SQL ayuda a depurar consultas lentas y optimizar el comportamiento de ORM.
Métodos para registrar SQL:
- Registro de consola
optionsBuilder .UseSqlServer(conn) .LogTo(Console.WriteLine, LogLevel.Information);Integración de ILoggerFactory
var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole()); optionsBuilder.UseLoggerFactory(loggerFactory);Interceptores Implementar
DbCommandInterceptor para capturar comandos y tiempos.Herramientas de creación de perfiles Utilice herramientas como:- MiniPerfilador
- Perfilador de servidor SQL
- EFCorePowerTools
El registro debe habilitarse selectivamente en producción para evitar gastos generales de rendimiento.
46) ¿Cuál es la diferencia entre ChangeTracker.DetectChanges() y AutoDetectChangesEnabled?
DetectChanges() AutoDetectChangesEnabled Ejemplo:
context.ChangeTracker.AutoDetectChangesEnabled = false;
foreach (var item in list)
{
context.Add(item);
}
context.SaveChanges();
Desactivar la detección automática en bucles mejora el rendimiento hasta en un 40% en operaciones masivas.
47) ¿Cómo se utilizan las tablas temporales con EF Core?
Las tablas temporales (introducidas en SQL Server 2016) le permiten realizar un seguimiento de datos históricos automáticamente.
Pasos:
- Habilitar soporte temporal en la migración:
builder.Entity<Employee>()
.ToTable("Employees", b => b.IsTemporal());
Consultar datos históricos:var history = context.Employees .TemporalAsOf(DateTime.UtcNow.AddDays(-7)) .ToList();
Ventajas:
- Seguimiento del historial de datos integrado
- Auditoría y cumplimiento
- No se requieren activadores manuales
EF Core 6+ admite consultas temporales completas.
48) ¿Cómo admite EF Core consultas compiladas y modelos pregenerados juntos?
Las consultas compiladas y los modelos compilados son dos características de rendimiento que se complementan entre sí.
Ejemplo de consulta compilada:
static readonly Func<AppDbContext, int, Customer> _getCustomerById = EF.CompileQuery((AppDbContext ctx, int id) => ctx.Customers.FirstOrDefault(c => c.Id == id));
Uso:
var customer = _getCustomerById(context, 5);
Juntos: Los modelos compilados reducen el coste inicial , mientras que las consultas compiladas reducen la sobrecarga de consultas en tiempo de ejecución — ideal para consultas de alta frecuencia .
49) ¿Cuáles son los errores comunes al utilizar EF en la arquitectura de microservicios?
Errores comunes:
- DbContext compartido entre servicios
→ Viola el aislamiento de microservicios.
→ Cada microservicio debe tener su propio DbContext y esquema. - Comunicación conversadora (N+1 consultas)
→ Minimiza las consultas de EF por llamada a la API. - Excessive Eager Loading
→ Load only what is required via DTOs. - Centralized Migrations
→ Each service should manage its own migrations independently. - Lack of Transactional Boundaries
→ Use distributed transactions (Outbox pattern) if cross-service consistency is required. - Tight Coupling to SQL Provider
→ Use repository abstraction to keep flexibility in database choice.
50) How does dependency injection integrate with DbContext in ASP.NET Core?
Entity Framework integrates seamlessly with ASP.NET Core’s built-in Dependency Injection (DI) system.
Setup:
services.AddDbContext<AppDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("Default")));
Then inject it into controllers or services:
public class CustomerService
{
private readonly AppDbContext _context;
public CustomerService(AppDbContext context)
{
_context = context;
}
}
Lifetimes:
Using DI ensures testability, lifecycle management , and resource efficiency across web and background processes.
🔍 Top Entity Framework Interview Questions with Real-World Scenarios &Strategic Responses
1) What is Entity Framework, and why is it used in enterprise applications?
Expected from candidate: The interviewer wants to assess your foundational understanding of Entity Framework and its value in real-world applications.
Example answer: Entity Framework is an Object-Relational Mapping framework for .NET that allows developers to work with databases using .NET objects instead of raw SQL. It is used in enterprise applications to improve productivity, reduce boilerplate data access code, and maintain a strong separation of concerns.
2) Can you explain the difference between Code First, Database First, and Model First approaches?
Expected from candidate: The interviewer wants to evaluate your knowledge of different development workflows and when to use each one.
Example answer: Code First starts with domain classes and generates the database from code. Database First begins with an existing database and generates entity classes. Model First uses a visual designer to define the model and then creates both code and database. Each approach is chosen based on project requirements and existing infrastructure.
3) How does Entity Framework handle relationships between tables?
Expected from candidate: The interviewer is checking your understanding of data modeling and relational mapping.
Example answer: Entity Framework handles relationships using navigation properties and foreign keys. It supports one-to-one, one-to-many, and many-to-many relationships, allowing developers to traverse related data using object references rather than joins.
4) Describe a situation where you improved database performance using Entity Framework.
Expected from candidate: The interviewer wants to hear a practical example demonstrating optimization skills.
Example answer: In my previous role, I improved performance by reducing unnecessary eager loading and implementing projection queries with Select statements. This minimized the amount of data retrieved from the database and significantly reduced query execution time.
5) How do you manage migrations in Entity Framework?
Expected from candidate: The interviewer is assessing your experience with schema changes and version control.
Example answer: Migrations are managed using the built-in migration tools that track model changes over time. At a previous position, I regularly generated and reviewed migration scripts before applying them to ensure database integrity across environments.
6) What is lazy loading, and when would you avoid using it?
Expected from candidate: The interviewer wants to test your understanding of data loading strategies and performance trade-offs.
Example answer: Lazy loading automatically loads related data when it is accessed. I would avoid using it in performance-critical scenarios or APIs because it can cause multiple unintended database calls, leading to the N+1 query problem.
7) How do you handle transactions in Entity Framework?
Expected from candidate: The interviewer is evaluating your knowledge of data consistency and error handling.
Example answer: Entity Framework supports transactions through the DbContext and TransactionScope. At my previous job, I used explicit transactions to ensure that multiple related database operations either completed successfully together or were rolled back in case of failure.
8) Explain how dependency injection is used with Entity Framework.
Expected from candidate: The interviewer wants to see how well you understand modern application architecture.
Example answer: Dependency injection is used to inject the DbContext into services or controllers. This improves testability and maintainability by allowing the context to be mocked or replaced without changing business logic.
9) Describe a challenging bug you encountered with Entity Framework and how you resolved it.
Expected from candidate: The interviewer is looking for problem-solving ability and debugging skills.
Example answer: In my last role, I encountered an issue with tracking conflicts when updating detached entities. I resolved it by explicitly setting entity states and ensuring that only one instance of each entity was tracked by the context.
10) How do you decide when Entity Framework is not the right tool?
Expected from candidate: The interviewer wants to understand your judgment and ability to choose appropriate technologies.
Example answer: I consider alternatives when applications require extremely high-performance data access or complex stored procedure logic. In such cases, using a micro-ORM or raw ADO.NET can provide more control and efficiency.
Lenguaje C
- Operadores C# Bitwise y Bit Shift
- C - Constantes y Literales
- C Palabras clave e identificadores
- Herencia pública, protegida y privada de C++
- Tutorial de instrucciones de bucle IF, Switch, For y While de C# [Ejemplos]
- Las 24 preguntas y respuestas principales de la entrevista de C ++ (actualización de 2021)
- Sobrecarga de operadores de C++
- Las 100 mejores preguntas y respuestas de entrevistas de programación C (2021)
- Tipos de modificadores de C++
- Punteros C
- Polimorfismo en C++