Las 50 preguntas y respuestas más importantes de la entrevista sobre Entity Framework (2026)

Prepararse para una entrevista de Entity Framework implica anticipar las preguntas que revelan la verdadera capacidad. Las preguntas de entrevista de Entity Framework revelan el pensamiento, la conciencia del rendimiento y cómo los candidatos traducen los conceptos a la práctica.
Dominar Entity Framework abre puertas a puestos en el desarrollo moderno, desde plataformas basadas en datos hasta servicios en la nube. La experiencia práctica desarrolla la capacidad analítica, fortalece la profundidad técnica y apoya a los equipos. Los responsables de contratación valoran la resolución práctica de problemas, el diseño escalable, la mentoría de jóvenes talentos y las vías de crecimiento para los recién graduados. Leer más ...
👉 Descarga gratuita en PDF: Preguntas y respuestas de la entrevista de Entity Framework
Preguntas y respuestas principales de la entrevista sobre Entity Framework
1) ¿Qué es Entity Framework y por qué se utiliza?
Entity Framework (EF) es MicrosoftORM (Mapa objeto-relacional) deping) marco para .NET que Simplifica la interacción con la base de datos al permitir que los desarrolladores trabajen con datos como objetos .NET fuertemente tipados en lugar de SQL sin formato.. Este abdominaltrac. tion permite a los desarrolladores realizar operaciones CRUD (Crear, Leer, Actualizar, Eliminar) utilizando construcciones C# familiares, y el framework se encarga de traducir estas operaciones a consultas SQL optimizadas internamente. EF reduce el código repetitivo de acceso a datos, mejora la mantenibilidad y ayuda a garantizar 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) Explica la diferencia entre Code Primero, enfoques de base de datos primero y enfoques de modelo primero.
Entity Framework admite tres enfoques de desarrollo principales:
| Nuevo enfoque | Cuándo usar | Lo que pasa |
|---|---|---|
| Code Nombre | Nuevos proyectos o diseño orientado al dominio | Usted define clases de entidad. EF genera el esquema de base de datos a partir del código. |
| Base de datos primero | Base de datos existente | EF genera clases de entidad y contexto a partir de un esquema existente. |
| Modelo primero | Cuando prefieres el diseño visual | Diseña el modelo en un diseñador visual (Entity Designer) y EF genera tanto las clases como la base de datos. |
Cada enfoque sirve para diferentes escenarios: Code Nombre es popular en el desarrollo ágil, Base de datos primero Se prefiere con bases de datos heredadas y Modelo primero 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 el sesión con la base de datos, tracLa entidad ks cambia 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, tú defines 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 utiliza este contexto para track estados de objeto y generar comandos SQL en SaveChanges().
4) ¿Qué son las migraciones en Entity Framework y cómo se utilizan?
Migración son un mecanismo para track y aplicar cambios de esquema a la base de datos con el 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 Primero, se utilizan comandos como:
Add-Migration InitialCreate Update-Database
Esto genera clases de migración que definen los cambios de esquema y los aplican 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 forma eficiente es fundamental en EF. Aquí tienes una comparación:
| Estrategia | Cuando corre | Uso típico |
|---|---|---|
| Carga Diferida (Lazy Loading) | Datos relacionados cargados en el primer acceso | Úselo cuando no siempre sean necesarios los datos relacionados. |
| Carga ansiosa | Datos relacionados cargados por adelantado a través de .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 Problemas de consulta N+1 Si no se utiliza con cuidado.
6) ¿Qué es el cambio? trac¿Rey en Entity Framework?
CAMBIAR tracKing es el mecanismo interno de EF para supervisar los cambios de estado de la entidad después de ejecutar una consulta. Cuando una entidad es recuperada por DbContext, es el tracked. Cualquier modificación a sus propiedades se anota y cuando SaveChanges() se llama, EF genera el SQL apropiado INSERT, UPDATE, o DELETE declaraciones. Para escenarios de solo lectura donde tracEl rey es innecesario, AsNoTracking() mejora el rendimiento al deshabilitar el cambio tracRey.
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 concurrencia (como un RowVersion marca de tiempo). EF comprueba este token durante SaveChanges(), y si difiere de la versión de la base de datos, una DbUpdateConcurrencyException Se lanza una excepción, lo que indica un conflicto. Los desarrolladores pueden gestionar esta excepción para reintentar o resolver las 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 las 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 sus relacionados CustomerEF utiliza estas propiedades para construir relaciones y realizar uniones automáticas durante las consultas. Las propiedades de navegación funcionan junto con... llaves extranjeras para modelar relaciones.
9) ¿Cuál es el propósito de AsNo?Tracrey()?
AsNoTracking() desactiva el cambio tracrey para una consulta, lo cual es beneficioso para sólo lectura operaciones en las que no se pretende actualizar las entidades recuperadas. Esto mejora el rendimiento al reducir el uso de memoria y tracEs especialmente útil para obtener grandes conjuntos de datos sin modificarlos.
10) ¿Qué son las consultas compiladas y cuándo deberías utilizarlas?
Las consultas compiladas son una técnica de optimización del rendimiento. Cuando se ejecuta una consulta LINQ, EF suele traducirla a SQL cada vez. Con las consultas compiladas, esta traducción se realiza una sola vez y el delegado resultante se reutiliza, lo que reduce la sobrecarga de las consultas complejas o de ejecución frecuente. Úselas en mucho trafico 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()?
Marco de la entidad tracks de cada entidad estado para determinar qué operación de base de datos realizar durante SaveChanges()Los principales estados de la entidad son:
| Estado | Descripción | Operación activada |
|---|---|---|
| Adicional | Nueva entidad a insertar | INSERT |
| Modificado | Entidad existente actualizada | UPDATE |
| Suprimido | Entidad marcada para eliminación | DELETE |
| Sin alterar | No se detectaron cambios | Ninguno |
| Separado | No traccondicionado por el contexto | Ninguno |
Cuando usted llama SaveChanges()EF inspecciona los estados de las entidades y ejecuta los comandos SQL correspondientes. Por ejemplo, una nueva entidad añadida a un DbSet será marcado Adicional, resultando 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.
Entendiendo 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 desventajas, dependiendo del caso de uso.
| Ventajas | Desventajas |
|---|---|
| Simplifica el acceso a los datos a través de LINQ y modelos de objetos. | Sobrecarga de rendimiento en comparación con ADO.NET sin formato. |
| Reduce el código SQL repetitivo. | Las consultas complejas pueden generar SQL ineficiente. |
| Admite múltiples proveedores de bases de datos. | Es más difícil depurar las sentencias SQL generadas. |
| Fuertemente tipado, mejorando la seguridad en tiempo de compilación. | Es posible que se produzcan conflictos migratorios en equipos grandes. |
| Permite la creación rápida de prototiposping con Code En primer lugar. | Less control sobre consultas afinadas. |
Para sistemas a gran escala que requieren el máximo rendimiento, los desarrolladores aún pueden mezclar SQL sin procesar con EF para la 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 de claves externas.
Los tipos de relaciones son:
| Tipo de relación | Descripción | Ejemplo |
|---|---|---|
| Programa XNUMX a XNUMX | Cada instancia de entidad tiene una entidad relacionada. | User ↔ UserProfile |
| Uno a muchos | Una entidad se relaciona con muchas otras. | Customer → Orders |
| Muchos a muchos | Múltiples entidades se relacionan entre sí. | Student ↔ Course |
Ejemplo de una Uno a muchos relación:
public class Customer
{
public int CustomerId { get; set; }
public ICollection<Order> Orders { get; set; }
}
EF genera automáticamente claves y manejadores externos reglas de eliminación en cascada dependiendo de la configuración.
También puede usar API fluida para un mapa de relaciones más explícitoping.
14) ¿Cuál es la diferencia entre LINQ to Entities y LINQ to SQL?
| Característica | LINQ para entidades | LINQ a SQL |
|---|---|---|
| Bases de datos compatibles | Múltiples (SQL Server, Oracle, MySQL, Etc.) | Solo SQL Server |
| Marco subyacente | Marco de la entidad | ADO.NET |
| Modelos | Modelo de entidad conceptual | Solo tablas de base de datos |
| Mapeo | Mapa complejoping (herencia, asociaciones) | Mapa de mesa directoping |
| Apoyo futuro | Apoyado activamente |
LINQ para entidades es parte de Entity Framework y más versátil, mientras que LINQ a SQL Se limita 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?
| Característica | Contexto de objeto | DbContexto |
|---|---|---|
| Marco conceptual | Versiones anteriores de EF | API simplificada en EF 4.1+ |
| Complejidad: | Más detallado | Ligero y fácil |
| Rendimiento | Un poco más rápido pero más difícil de usar. | Simplificado con una sobrecarga mínima |
| CAMBIAR TracBooking | Se necesita configuración manual | Automático tracBooking |
| Uso preferido | Sistemas legados | Proyectos modernos de EF/EF Core |
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) Explique el ciclo de vida de una entidad en Entity Framework.
El ciclo de vida de una entidad describe su transiciones de estado De la creación a la persistencia:
- contenido SEO – La entidad se instancia en la memoria (estado: Separado).
- Adjunto: – Añadido al contexto mediante
DbSet.Add()(estado: Adicional). - Modificación – Cambios detectados automáticamente (estado: Modificado).
- Persistencia –
SaveChanges()llamados → Comandos SQL ejecutados. - Eliminacion – Entidad marcada como Suprimido y eliminado de la base de datos.
Comprender este ciclo de vida ayuda a depurar problemas de datos y optimizar la gestión del contexto de EF.
17) ¿Cuál es el uso de Fluent API en Entity Framework?
El API fluida Proporciona una forma programática de configurar las relaciones, restricciones y mapas del modelo.pings, a menudo utilizado en el OnModelCreating() método de su DbContext.
Proporciona un control detallado sobre las configuraciones que anotaciones de datos No se puede expresar.
Ejemplo:
modelBuilder.Entity<Customer>()
.HasMany(c => c.Orders)
.WithOne(o => o.Customer)
.HasForeignKey(o => o.CustomerId);
La API fluida 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 aplican directamente a las clases o propiedades del modelo para definir el comportamiento del esquema. Son más sencillas que la API de Fluent, 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 cadena, campos obligatorios y relaciones. Para casos avanzados, los desarrolladores suelen combinar Anotaciones de datos y API fluida.
19) ¿Cuál es la diferencia entre tracked y untrac¿Entidades ked en EF Core?
| Tipo | Descripción | Caso de uso |
|---|---|---|
| TracEntidades ked | Monitoreado por DbContext para cambios. |
Comportamiento predeterminado para las actualizaciones. |
| UntracEntidades ked | No monitoreado; recuperado con .AsNoTracking(). |
Ideal para operaciones de solo lectura. |
TracLas entidades vinculadas consumen más memoria, pero permiten que EF detecte los cambios automáticamente.
UntracLas entidades ked mejoran . en escenarios de alta lectura y baja actualización.
20) ¿Cómo se pueden ejecutar consultas SQL sin procesar en Entity Framework?
Entity Framework permite ejecutar SQL sin procesar para consultas personalizadas o de rendimiento crítico.
var result = context.Products
.FromSqlRaw("SELECT * FROM Products WHERE Price > 100")
.ToList();
Para comandos que no sean de consulta:
context.Database.ExecuteSqlRaw("DELETE FROM Products WHERE Discontinued = 1");
Utilice esta función con cuidado para evitar inyección SQL y mantener una 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.
| Característica | Entity Framework 6 (EF6) | Núcleo del marco de la entidad |
|---|---|---|
| Plataforma | Solo .NET Framework | Multiplataforma (.NET 5/6/7) |
| Arquitectura | Basado en ObjectContext | Ligero y modular |
| Rendimiento | Más lento en algunas consultas | Generación de consultas optimizada |
| Soporte LINQ | Maduro pero limitado | Traducción mejorada y asíncrona |
| Proveedores de bases de datos | Servidor SQL, Oracle | Múltiples (MySQL, PostgreSQL, SQLite, Etc.) |
| Caracteristicas | Maduro (por ejemplo, carga diferida) | Moderno (por ejemplo, propiedades de sombra, filtros globales) |
EF Core es el moderno, 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 integridad de los datos cuando varias operaciones deben tener éxito o fallar juntas. Por defecto, EF encapsula 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 Sistema.Transacciones para soporte de transacciones distribuidas.
23) Explique las estrategias de herencia TPH, TPT y TPC en Entity Framework.
Entity Framework admite tres mapas de herencia principalesping estrategias para modelar jerarquías de clases.
| Estrategia | Descripción | Ejemplo | Ventajas | Desventajas |
|---|---|---|---|---|
| TPH (Tabla por jerarquía) | Todas las clases comparten una tabla; una columna discriminadora identifica el tipo. | Común en EF Core. | Consultas sencillas y rápidas. | La mesa puede llegar a ser grande y escasa. |
| TPT (Tabla por tipo) | Cada subclase tiene su propia tabla. | Cada clase derivada se asigna por separado. | Esquema normalizado. | Uniones más lentas en jerarquías grandes. |
| TPC (Tabla por clase de hormigón) | Cada clase tiene su propia tabla con columnas duplicadas. | Cada entidad mapeada por separado. | Lecturas de alto rendimiento. | Redundancia de datos. |
La mayoría de los desarrolladores prefieren TPH por su simplicidad, a menos que las necesidades de normalización o rendimiento dicten lo contrario.
24) ¿Cómo se gestiona el ajuste del rendimiento en Entity Framework?
Para optimizar el rendimiento de Entity Framework:
- Usa
AsNoTracking()para consultas de solo lectura. - Carga ansiosa Sólo las entidades relacionadas necesarias con
.Include(). - Evite las consultas N+1 utilizando proyecciones o
Select(). - Utilice consultas compiladas para operaciones que se ejecutan con frecuencia.
- Realizar múltiples inserciones/actualizaciones por lotes con
AddRange()ySaveChanges(). - Deshabilitar AutoDetectChanges para operaciones a granel:
context.Configuration.AutoDetectChangesEnabled = false; - Utilice el almacenamiento en caché y la paginación para grandes conjuntos de datos.
Una implementación de EF bien ajustada puede aproximarse al rendimiento de ADO.NET y al mismo tiempo conservar la productividad del desarrollador.
25) ¿Qué es una propiedad de sombra en Entity Framework Core?
A propiedad de sombra Existe en el modelo EF pero no en la clase de entidad. EF lo mantiene en el cambio. tracker y almacenado en la base de datos.
Ejemplo:
modelBuilder.Entity<Order>()
.Property<DateTime>("LastUpdated");
Esto permite que EF almacene 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 de sombra son ideales para escenarios de registro o auditoría.
26) ¿Qué son los convertidores de valor en EF Core?
Los convertidores de valores en EF Core permiten la transformación de valores de propiedad 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 suaves or multi Alquiler.
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 capacidad de mantenimiento y la seguridad de los datos.
28) ¿Cómo se puede probar el código de Entity Framework utilizando pruebas unitarias?
Para realizar pruebas unitarias de la lógica EF sin acceder a una base de datos real, utilice bases de datos en memoria or burlón:
- Opción 1: Proveedor InMemory
var options = new DbContextOptionsBuilder<AppDbContext>() .UseInMemoryDatabase("TestDb") .Options; - Opción 2: Simular DbContext
Burlarse deDbSetutilizando 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
SaveChanges() - Lógica del repositorio
Las pruebas con EF Core InMemory garantizan la velocidad y evitan dependencias de SQL Server.
29) Explique los patrones de Repositorio y Unidad de Trabajo en EF.
Estos dos patrones arquitectónicos ayudan abstracacceso a datos y mantener la consistencia transaccional.
| Patrón de Costura | Propósito | Ejemplo de implementación |
|---|---|---|
| Repositorio | Encapsula operaciones CRUD para cada entidad. | 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 confirmación. |
Ejemplo:
public class UnitOfWork : IUnitOfWork
{
private readonly AppDbContext _context;
public void Commit() => _context.SaveChanges();
}
Estos patrones mejoran comprobabilidad, reutilización de código y separación de intereses en aplicaciones empresariales de gran tamaño.
30) ¿Cuál es la diferencia entre carga ansiosa y carga de proyección?
| Aspecto | Carga ansiosa | Carga de proyección |
|---|---|---|
| Propósito | Carga datos relacionados por adelantado | Carga solo campos o propiedades específicos |
| Método | .Include() |
.Select() |
| Ejemplo | context.Orders.Include(o => o.Customer) |
context.Orders.Select(o => new { o.Id, o.Customer.Name }) |
| Rendimiento | Obtiene objetos completos | Obtiene datos mínimos |
| Caso de uso | Cuando se necesitan entidades relacionadas para el procesamiento | Cuando necesitas datos ligeros y específicos |
La carga de proyección es una optimización de rendimiento que 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 conexión.
Actúan como componentes de middleware entre EF y el proveedor de base de datos.
Ejemplo: Registra 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 desempeño tracBooking
32) ¿Cómo gestiona EF Core las operaciones asincrónicas?
Entity Framework Core es totalmente compatible programación asincrónica a través de métodos como SaveChangesAsync(), ToListAsync() y FirstOrDefaultAsync().
La ejecución asincrónica ayuda mejorar la escalabilidad en aplicaciones web, liberando subprocesos mientras se esperan operaciones de base de datos limitadas por E/S.
Ejemplo:
var customers = await context.Customers
.Where(c => c.IsActive)
.ToListAsync();
Las operaciones asincrónicas son particularmente efectivas en entornos de alto rendimiento. API de ASP.NET Core y microservicios, reduciendo llamadas de bloqueo 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 su aplicación recuperarse automáticamente de fallos transitorios 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 volverá a intentar operaciones fallidas hasta 5 veces con demoras.
Esto es particularmente útil en entornos alojados en la nube como Azure SQL donde los fallos transitorios son comunes.
34) ¿Cuáles son los tipos de entidades propias en EF Core?
Las entidades propias permiten el modelado objetos de valor que dependen enteramente del ciclo de vida de otra entidad.
Comparten la misma mesa que su propietario y no pueden existir independientemente.
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:
Conceptos de modelado como Dirección , Dinero, o Measurement que no tienen identidad propia.
35) ¿Cómo se pueden implementar eliminaciones suaves en Entity Framework Core?
Las eliminaciones suaves marcan los registros como eliminados en lugar de eliminarlos físicamente.
Se implementan mediante un 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:
- Preservació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 utiliza?
En EF Core 6+, modelos compilados permite la precompilación de los metadatos del modelo EF en un ensamblaje .NET, lo que reduce el tiempo de inicio y la sobrecarga de 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. Existen dos niveles principales:
| Tipo | Descripción | Ejemplo |
|---|---|---|
| Caché de primer nivel | Incorporado, por DbContext ejemplo |
Gestionado automáticamente |
| caché de segundo nivel | Caché externa compartida entre contextos | Utilice 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 de lectura intensiva evitando accesos redundantes a la base de datos.
38) ¿Cómo gestiona EF Core los tokens de concurrencia y las marcas de tiempo?
Los tokens de concurrencia evitan actualizaciones contradictorias en entornos multiusuario.
Puede marcar una propiedad como un token de concurrencia utilizando el [ConcurrencyCheck] or [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 es lanzado — asegurando control de concurrencia optimista.
39) ¿Cómo se implementa la auditoría (creación, modificación, eliminación)? tracrey) en EF Core?
Revisión de cuentas tracmetadatos ks tales como quién creó, modificó o eliminó Records.
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 gobernanza de datos consistente.
40) ¿Cuáles son las mejores prácticas para utilizar Entity Framework en aplicaciones empresariales?
| Categoría | Mejora la práctica | Beneficio |
|---|---|---|
| Rendimiento | Usa 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 organizacional | Utilice agrupación de conexiones y métodos asincrónicos. | Maneja cargas elevadas. |
| Migración | Utilice migraciones automatizadas con control de versiones. | Simplifica la gestión de esquemas. |
| Configuration | Externalizar cadenas de conexión y secretos. | Mejor aislamiento ambiental. |
| Pruebas | Utilice el proveedor InMemory para pruebas unitarias. | Ejecuciones de prueba más rápidas. |
| Inicio de sesión | Habilite el registro de EF para obtener información sobre el rendimiento. | Depuración más sencilla. |
Estas prácticas garantizan Robusto, escalable y mantenible aplicaciones creadas en Entity Framework.
41) ¿Cómo se pueden optimizar las consultas LINQ para una mejor traducción SQL en Entity Framework?
Entity Framework convierte automáticamente las consultas LINQ a SQL, pero los patrones ineficientes pueden generar SQL lento o redundante. Optimizar LINQ garantiza que el ORM genere consultas de base de datos de alto rendimiento.
Técnicas de optimización:
Utilice proyecciones:
- Seleccione sólo las columnas requeridas en lugar de entidades completas.
- Evite la evaluación del lado del cliente:
Asegúrese siempre de que se realice el filtrado en SQL, no en memoria. EF Core advierte cuando la evaluación se realiza del lado del cliente. - Usa
AsNoTracking()para datos de sólo lectura. - Aprovechar las consultas compiladas para operaciones LINQ repetidas.
- Evite innecesario
.Include()llamadas — incluya datos relacionados sólo cuando sea necesario.
var customers = context.Customers
.Select(c => new { c.Id, c.Name })
.ToList();
var orders = context.Orders.AsNoTracking().ToList();
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 sembrar datos iniciales en EF Core?
La siembra de datos garantiza que la base de datos tenga datos predeterminados o de referencia cuando se creó.
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 semillas personalizadas
Ejecutar código manualmente al inicio:
context.Database.Migrate();
if (!context.Users.Any())
{
context.Users.Add(new User { Name = "Admin" });
context.SaveChanges();
}
Enfoque 3: Scripts SQL
Utilice SQL sin formato en las migraciones:
migrationBuilder.Sql("INSERT INTO Roles (Name) VALUES ('Admin')");
Recomendación:
Usa HasData() para datos de referencia estáticos y siembra programática para datos de inicio dinámicos.
43) ¿Cómo gestiona 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 base de datos a través de paquetes de proveedores de bases de datos.
Proveedores comunes:
| Proveedor | NuGet PREMIUM | Database |
|---|---|---|
| SQL Server | Microsoft.EntityFrameworkCore.SqlServer |
MSSQL |
| SQLite | Microsoft.EntityFrameworkCore.Sqlite |
Móvil/Escritorio |
| PostgreSQL | Npgsql.EntityFrameworkCore.PostgreSQL |
PostgreSQL |
| MySQL | Pomelo.EntityFrameworkCore.MySql |
MySQL |
| base de datos cosmos | Microsoft.EntityFrameworkCore.Cosmos |
NoSQL |
Internamente, EF Core utiliza abstraccapas de ción por:
- Traducción de consultas
- Generación de comandos SQL
- Mapa de tipos de datosping
Cada proveedor implementa sus propias clases heredando de la clase base de EF Core.tracciones (por ejemplo, RelationalDatabaseProvider, QuerySqlGenerator).
44) ¿Qué es una “consulta dividida” y cuándo debería utilizarse?
Las consultas divididas impiden que EF funcione 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 se ejecuta:
- Consulta 1 → Conseguir clientes
- Consulta 2 → Obtener pedidos relacionados con esos clientes
Beneficios:
- Evita grandes productos cartesianos.
- Mejora el rendimiento con grandes conjuntos de datos relacionados.
Retirarse:
Múltiples viajes de ida y vuelta a la base de datos.
Usa consultas divididas cuando se cargan con impaciencia grandes datos relacionados que pueden causar problemas de memoria.
45) ¿Cómo se pueden supervisar eficazmente los comandos SQL generados por EF?
La monitorización de SQL ayuda a depurar consultas lentas y optimizar el comportamiento de ORM.
Métodos para registrar SQL:
- Registro de consola
- Integración con ILoggerFactory
- Interceptores Implementar
DbCommandInterceptorpara capturar comandos y tiempos. - Herramientas de perfilado Utilice herramientas como:
- miniperfilador
- Analizador de SQL Server
- Herramientas eléctricas EFCore
optionsBuilder
.UseSqlServer(conn)
.LogTo(Console.WriteLine, LogLevel.Information);
var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole()); optionsBuilder.UseLoggerFactory(loggerFactory);
El registro debe ser habilitado selectivamente en producción para evitar sobrecarga de rendimiento.
46) ¿Cuál es la diferencia entre Cambio?Trac¿ker.DetectChanges() y AutoDetectChangesEnabled?
| Característica | DetectChanges() |
AutoDetectChangesEnabled |
|---|---|---|
| Tipo | Método | Propiedad |
| Propósito | Obliga a EF a escanear tracentidades ked y detectar cambios | Habilita/deshabilita la detección automática de cambios |
| Predeterminado | Manual | Cierto |
| Uso | Exigir explícitamente la optimización del rendimiento | Deshabilitar para actualizaciones masivas |
Ejemplo:
context.ChangeTracker.AutoDetectChangesEnabled = false;
foreach (var item in list)
{
context.Add(item);
}
context.SaveChanges();
Deshabilitar la detección automática en bucles mejora el rendimiento hasta en un 40% en operaciones a granel.
47) ¿Cómo se utilizan tablas temporales con EF Core?
Las tablas temporales (introducidas en SQL Server 2016) le permiten track datos históricos automáticamente.
Pasos:
- Habilitar soporte temporal en la migración:
- Consultar datos históricos:
builder.Entity<Employee>()
.ToTable("Employees", b => b.IsTemporal());
var history = context.Employees
.TemporalAsOf(DateTime.UtcNow.AddDays(-7))
.ToList();
Ventajas:
- Historial de datos integrado tracBooking
- Auditoría y cumplimiento
- No se requieren disparadores 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í.
| Característica | Propósito |
|---|---|
| Consultas compiladas | Resultados de la traducción de consultas en caché |
| Modelos compilados | Precompilar metadatos del modelo |
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 costes iniciales, mientras que las consultas compiladas reducen sobrecarga de consultas en tiempo de ejecución — ideal para consultas de alta frecuencia.
49) ¿Cuáles son los errores más comunes al utilizar EF en la arquitectura de microservicios?
Errores comunes:
- DbContext compartido entre servicios
→ Viola el aislamiento del microservicio.
→ Cada microservicio debe tener su propio DbContext y esquema. - Comunicación conversacional (N+1 consultas)
→ Minimizar las consultas EF por llamada API. - Carga excesivamente ansiosa
→ Cargue únicamente lo necesario a través de DTO. - Migraciones centralizadas
→ Cada servicio debe gestionar sus propias migraciones de forma independiente. - Falta de límites transaccionales
→ Utilice transacciones distribuidas (patrón de bandeja de salida) si se requiere consistencia entre servicios. - Acoplamiento estrecho con el proveedor SQL
→ Usar el repositorio abstracpara mantener la flexibilidad en la elección de la base de datos.
50) ¿Cómo se integra la inyección de dependencia con DbContext en ASP.NET Core?
Entity Framework se integra perfectamente con Inyección de dependencias (DI) integrada en ASP.NET Core .
Configuración:
services.AddDbContext<AppDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("Default")));
Luego inyéctelo en los controladores o servicios:
public class CustomerService
{
private readonly AppDbContext _context;
public CustomerService(AppDbContext context)
{
_context = context;
}
}
Vidas:
| Dura toda la vida | Descripción | Recomendado para |
|---|---|---|
| Alcance | Un contexto por solicitud HTTP | Predeterminado |
| Transitorio | Nueva instancia cada vez | Trabajos en segundo plano |
| Semifallo | Compartido globalmente | Evitar (no seguro para subprocesos) |
El uso de DI garantiza capacidad de prueba, gestión del ciclo de vida y eficiencia de los recursos a través de procesos web y en segundo plano.
🔍 Preguntas clave de entrevistas sobre Entity Framework con situaciones reales y respuestas estratégicas
1) ¿Qué es Entity Framework y por qué se utiliza en aplicaciones empresariales?
Se espera del candidato: El entrevistador quiere evaluar su comprensión básica de Entity Framework y su valor en aplicaciones del mundo real.
Respuesta de ejemplo: Entity Framework es un mapa objeto-relacional.ping Framework para .NET que permite a los desarrolladores trabajar con bases de datos utilizando objetos .NET en lugar de SQL puro. Se utiliza en aplicaciones empresariales para mejorar la productividad, reducir el código repetitivo de acceso a datos y mantener una sólida separación de responsabilidades.
2) ¿Puedes explicar la diferencia entre? Code ¿Enfoques primero, primero la base de datos y primero el modelo?
Se espera del candidato: El entrevistador quiere evaluar su conocimiento de los diferentes flujos de trabajo de desarrollo y cuándo utilizar cada uno.
Respuesta de ejemplo: Code El enfoque First comienza con clases de dominio y genera la base de datos a partir del código. Database First parte de una base de datos existente y genera clases de entidad. Model First utiliza un diseñador visual para definir el modelo y luego crea tanto el código como la base de datos. Cada enfoque se elige en función de los requisitos del proyecto y la infraestructura existente.
3) ¿Cómo maneja Entity Framework las relaciones entre tablas?
Se espera del candidato: El entrevistador está comprobando su comprensión del modelado de datos y los mapas relacionales.ping.
Respuesta de ejemplo: Entity Framework gestiona las relaciones mediante propiedades de navegación y claves foráneas. Admite relaciones uno a uno, uno a muchos y muchos a muchos, lo que permite a los desarrolladores explorar datos relacionados mediante referencias a objetos en lugar de uniones.
4) Describe una situación en la que mejoraste el rendimiento de la base de datos utilizando Entity Framework.
Se espera del candidato: El entrevistador quiere escuchar un ejemplo práctico que demuestre habilidades de optimización.
Respuesta de ejemplo: En mi puesto anterior, mejoré el rendimiento reduciendo la carga impulsiva innecesaria e implementando consultas de proyección con sentencias Select. Esto minimizó la cantidad de datos recuperados de la base de datos y redujo significativamente el tiempo de ejecución de las consultas.
5) ¿Cómo se gestionan las migraciones en Entity Framework?
Se espera del candidato: El entrevistador está evaluando su experiencia con cambios de esquema y control de versiones.
Respuesta de ejemplo: Las migraciones se gestionan utilizando las herramientas de migración integradas que tracEl modelo k cambia con el tiempo. En un puesto anterior, generaba y revisaba regularmente scripts de migración antes de aplicarlos para garantizar la integridad de la base de datos en diferentes entornos.
6) ¿Qué es la carga diferida y cuándo conviene evitarla?
Se espera del candidato: El entrevistador quiere poner a prueba su comprensión de las estrategias de carga de datos y las compensaciones de rendimiento.
Respuesta de ejemplo: La carga diferida carga automáticamente los datos relacionados al acceder a ellos. Se recomienda evitar su uso en escenarios o APIs de rendimiento crítico, ya que puede provocar múltiples llamadas no deseadas a la base de datos, lo que genera el problema de las consultas N+1.
7) ¿Cómo se gestionan las transacciones en Entity Framework?
Se espera del candidato: El entrevistador está evaluando su conocimiento sobre la consistencia de los datos y el manejo de errores.
Respuesta de ejemplo: Entity Framework admite transacciones a través de DbContext y TransactionScope. En mi trabajo anterior, utilizaba transacciones explícitas para garantizar que varias operaciones de base de datos relacionadas se completaran correctamente juntas o se revirtieran en caso de fallo.
8) Explique cómo se utiliza la inyección de dependencia con Entity Framework.
Se espera del candidato: El entrevistador quiere ver qué tan bien comprende la arquitectura de aplicaciones modernas.
Respuesta de ejemplo: La inyección de dependencias se utiliza para inyectar el DbContext en servicios o controladores. Esto mejora la capacidad de prueba y mantenimiento, ya que permite simular o reemplazar el contexto sin modificar la lógica de negocio.
9) Describe un error desafiante que encontraste con Entity Framework y cómo lo resolviste.
Se espera del candidato: El entrevistador busca capacidad de resolución de problemas y habilidades de depuración.
Respuesta de ejemplo: En mi último puesto, me encontré con un problema con tracConflictos de rey al actualizar entidades separadas. Lo resolví estableciendo explícitamente los estados de la entidad y asegurándome de que solo una instancia de cada entidad fuera traccondicionado por el contexto.
10) ¿Cómo decidir cuándo Entity Framework no es la herramienta adecuada?
Se espera del candidato: El entrevistador quiere comprender su criterio y capacidad para elegir tecnologías adecuadas.
Respuesta de ejemplo: Considero alternativas cuando las aplicaciones requieren un acceso a datos de alto rendimiento o una lógica compleja de procedimientos almacenados. En tales casos, usar un micro-ORM o ADO.NET sin formato puede proporcionar mayor control y eficiencia.
