Cheat sheet de EF Core 11
Las partes de EF Core 11 que vale la pena recordar.
Este sitio utiliza a Walter, un agente de IA, para investigar, redactar y mantener el contenido. Proceso editorial y de verificación
Este pilar es un índice vivo de todo lo que he escrito sobre EF Core 11: nuevas características de consulta, búsqueda vectorial con índices DiskANN, trabajo de rendimiento y notas de migración desde EF Core 8, 9 o 10.
Qué leer primero
Si ya conoces EF Core y solo quieres el delta, revisa los posts etiquetados con “ef core 11”. Si estás planeando una migración, los posts etiquetados con migration incluyen cambios rompedores y los comandos dotnet ef exactos que usé.
Qué hay en esta página
La lista de abajo recopila automáticamente los posts etiquetados con alguno de: ef core, efcore, entity framework, ef core 11, efcore 11. Los más recientes primero.
Índice (105 posts)
2026 / 10
- Solución: The property 'X' is part of a key and so cannot be modified or marked as modified en EF Core
EF Core nunca actualiza el valor de una clave en una entidad rastreada. Deja de copiar la clave desde los DTO, usa un índice único en lugar de una clave alternativa, y cambia una clave real insertando una fila nueva y eliminando la anterior. Probado en EF Core 10.0.14.
- Cómo mantener carpetas de migraciones separadas para varios DbContext en un proyecto de EF Core
Pasa --output-dir una vez por DbContext y EF Core mantiene cada migración posterior en esa carpeta y espacio de nombres. Por qué el diseño predeterminado queda desbalanceado, la colisión CS0111 que aparece con una carpeta compartida, cómo mover migraciones existentes y cuándo separar la tabla de historial.
- Cómo configurar una relación muchos a muchos autorreferenciada (seguidores/seguidos) en EF Core
Modela seguidores y seguidos en una sola entidad User en EF Core 11: qué construye la convención, por qué SQL Server convierte en silencio una clave foránea de la tabla de unión en ClientCascade, cómo mapear una entidad de unión Follow explícita con una marca de tiempo y cómo eliminar un usuario sin los errores 547 o 1785.
- ¿Qué decide si EF Core genera una columna `date` de SQL Server como `DateOnly` o `DateTime`?
Lo decide la versión de EF Core del proveedor de SQL Server en tu proyecto de inicio: EF Core 7 y anteriores generan date como DateTime, EF Core 8 a 11 lo generan como DateOnly. Aquí está el mapeo de tipos que toma la decisión, la salida medida con EF Core 7, 8, 10 y 11 RC 2, y las dos formas de recuperar DateTime sin remapear en silencio la columna a datetime2.
- Solución: conflicto de versiones NU1608 / NU1107 entre Pomelo.EntityFrameworkCore.MySql y EF Core 10
Pomelo 9.0.0 solo admite EF Core Relational 9.0.x y no tiene una compilación para EF Core 10. Mantén todos los paquetes de EF Core en 9.0.x, o cambia a Microting.EntityFrameworkCore.MySql 10.0.x. Suprimir la advertencia provoca un fallo al iniciar.
- Fix: Settings file 'DotnetToolSettings.xml' was not found in the package
El paquete de la herramienta apunta a una versión de .NET más nueva que el SDK que ejecuta la instalación, o no es una herramienta de .NET. Usa un SDK más nuevo, fija una versión de la herramienta con una carpeta tools compatible, o fuerza --framework.
- Cómo comprobar si una entidad ya está rastreada por el DbContext antes de adjuntarla en EF Core
Usa DbSet.Local.FindEntry(key) para preguntarle al change tracker si hay una entidad rastreada con una clave dada, sin viaje a la base de datos ni recorrido. Por qué Entry(entity).State miente para esta pregunta, por qué Find consulta la base de datos y un helper AttachOrMerge probado para EF Core 10.
- Qué es un modelo compilado en EF Core 11 y cuándo vale la pena activarlo
Un modelo compilado es C# generado que recrea tu modelo de EF Core sin ejecutar OnModelCreating. Medido en EF Core 11 RC1: la carga del modelo baja de 714 ms a 215 ms con 500 entidades, pero la vía de MSBuild (que reemplazó a EFOptimizeContext) es más lenta, los modelos desactualizados fallan en silencio y los filtros de consulta bloquean la generación.
- Qué es una shadow property en EF Core 11 y por qué apareció una en mi migración
Una shadow property es una columna que EF Core rastrea sin una propiedad CLR correspondiente. Por qué EF Core 11 las crea (propiedades FK ausentes, FK con nombre incorrecto, tipos incompatibles, relaciones duplicadas), cómo detectar las del tipo BlogId1 en una migración, cómo corregir cada causa y cómo usarlas a propósito.
- AddDbContextPool vs AddDbContextFactory para ejecutar consultas de EF Core en paralelo
AddDbContextPool entrega un DbContext con ámbito por cada ámbito de DI, así que no puede ejecutar dos consultas a la vez. AddDbContextFactory y AddPooledDbContextFactory te dan un contexto por llamada, que es lo que necesitan las consultas en paralelo. Medido en EF Core 11 RC 1: la factoría con pool crea un contexto en 342 ns y 40 B frente a 17 us y 44 KB.
- Solución: Invalid column name 'Value' al usar SqlQueryRaw<T> para un resultado escalar en EF Core
EF Core envuelve un SqlQuery<T> escalar en una subconsulta y selecciona una columna llamada Value en cuanto añades First, Where, Max o Single. Ponle el alias AS Value a tu columna SQL, o materializa primero.
- Solución: There is already an object named 'X' in the database después de reiniciar las migraciones de EF Core
Después de borrar la carpeta Migrations y generar un nuevo InitialCreate, EF Core no sabe que tus tablas existen. Elimina la base de datos de desarrollo o registra la nueva migración en __EFMigrationsHistory sin ejecutarla.
- Cómo establecer parámetros de sesión de PostgreSQL como search_path o statement_timeout en cada conexión de EF Core con Npgsql
Un SET ejecutado una sola vez se borra con DISCARD ALL en cuanto Npgsql devuelve la conexión a su pool. Pon search_path y statement_timeout en el paquete de inicio con las palabras clave Search Path y Options de la cadena de conexión, recurre a ALTER ROLE o a un interceptor ConnectionOpened, y entiende por qué UsePhysicalConnectionInitializer pierde su SET sin avisar.
- EF.Parameter vs EF.Constant en consultas de EF Core 11
EF.Constant incrusta un valor capturado como literal SQL, EF.Parameter convierte un literal en un parámetro SQL. Conserva los valores predeterminados de EF Core, usa EF.Parameter para evitar que los árboles de expresión construidos dinámicamente se recompilen en cada llamada, y usa EF.Constant solo para un valor con pocos valores distintos cuyos datos estén lo bastante sesgados como para necesitar su propio plan.
2026 / 09
- Solución: EF Core no pudo traducir `Contains` sobre un `IList<T>` o `ISet<T>` static readonly
EF Core 8, 9 y 10 no logran traducir Contains cuando la lista es un campo static readonly de tipo IList, ICollection, ISet o IReadOnlySet. Llama a Enumerable.Contains de forma explícita o actualiza a EF Core 11.
- Cómo agregar un índice único en una propiedad mapeada a JSON en EF Core 11 (SQL Server y SQLite)
HasIndex(...).IsUnique() en un miembro ToJson() no impone unicidad en EF Core 11 RC 1: SQL Server descarta IsUnique y SQLite indexa el documento completo. Expón el valor JSON como una columna calculada y coloca el índice único sobre esa columna en su lugar.
- Cómo agregar elementos de forma atómica a un array jsonb de PostgreSQL con EF Core y Npgsql
Cargar una entidad, llamar a List.Add y guardar reescribe todo el documento jsonb y pierde en silencio los agregados concurrentes. Lleva el agregado a un único UPDATE con el operador jsonb ||, ya sea mediante ExecuteSqlAsync o con una función mapeada dentro de ExecuteUpdateAsync, y hazlo idempotente con una guarda @>.
- Cómo usar una secuencia de Oracle para generar claves primarias en EF Core
Mapea una clave de EF Core a una secuencia de Oracle con UseSequence en Oracle.EntityFrameworkCore 10: el DDL y el SQL de INSERT que el proveedor emite de verdad, cómo apuntar a una secuencia existente o a un trigger heredado, por qué las comillas y HiLo confunden a tanta gente, y cómo pasar una columna identity a una secuencia sin ORA-00001.
- Cómo agregar pluralización personalizada de nombres de tabla a dotnet ef dbcontext scaffold con IPluralizer
Una tabla llamada Gas genera una entidad llamada Ga. Reemplaza el pluralizador integrado de Humanizer por tu propio IPluralizer, regístralo mediante IDesignTimeServices en el proyecto de inicio y entiende por qué TryAddSingleton ahí no hace nada en silencio.
- Cómo garantizar el procesamiento idempotente de mensajes con EF Core 11 cuando dos instancias de la app consumen el mismo mensaje
La comprobación de existencia en tu handler no es la protección que crees. Pon un índice único en la tabla inbox, escribe el marcador en el mismo SaveChanges que el cambio de negocio, y deja que la base de datos elija al ganador. Más la trampa de ExecuteUpdate que deshace todo en silencio.
- Cómo aplicar convenciones de nombres personalizadas para claves primarias, claves foráneas e índices en las migraciones de EF Core 11
Renombra cada PK_, FK_, AK_ e IX_ que genera EF Core 11 con una sola IModelFinalizingConvention, deja que los nombres explícitos sigan ganando, mantente por debajo del límite de longitud de identificadores y evita la reconstrucción del índice clúster que la siguiente migración genera sobre una base de datos existente.
- Migra una app de EF Core con Cosmos tras el cambio en el escape de los id generados en EF Core 11
EF Core 11 deja de escapar '/', '\', '?' y '#' en los valores id generados para Cosmos DB, así que los documentos escritos por EF Core 8-10 dejan de resolverse por clave. Cómo saber si te afecta, cuándo activar el switch EscapeIllegalCosmosIdCharacters y cómo reescribir los id de forma segura con un lote transaccional.
- Nivel de compatibilidad 150 vs 160 de SQL Server: qué cambia para las consultas de EF Core 11
EF Core 11 ahora usa por defecto el nivel de compatibilidad 160 en UseSqlServer, lo que mete LEAST, GREATEST y LTRIM/RTRIM de dos argumentos en tu SQL, incluido cada Take(n).FirstOrDefault(). Quédate en 160 con SQL Server 2022 o posterior; fija UseCompatibilityLevel(150) si algún entorno todavía ejecuta SQL Server 2019.
- Solución: MigrateAsync y CanConnectAsync de EF Core siguen reintentando 'Login failed for user' durante 60 segundos
La comprobación de existencia de EF Core para SQL Server reintenta el error 18456 durante un minuto completo, con o sin EnableRetryOnFailure. Falla rápido, limita RetryTimeout o espera a EF Core 12.
- Solución: Could not load file or assembly 'Microsoft.Data.SqlClient, Version=7.0.0.0' tras actualizar EF Core
EF Core 11 está compilado contra Microsoft.Data.SqlClient 7.0.0.0, pero una copia 6.x ganó en el restore o en la implementación. Quita el pin antiguo de SqlClient y vuelve a implementar la salida completa.
- Solución: InvalidOperationException: Nullable object must have a value en una proyección de EF Core 11
EF Core lanza esta excepción cuando un Select lee un NULL de SQL en un int, decimal o DateTime no anulable. Convierte el miembro a su tipo anulable y agrega ?? default, o protege la navegación con una comprobación de null.
- Cómo escapar los comodines % y _ en consultas con EF.Functions.Like y StartsWith en EF Core 11
StartsWith, EndsWith y Contains ya escapan % y _ por ti en EF Core 11, pero EF.Functions.Like no lo hace. Aquí tienes el SQL que genera EF, un helper de escape reutilizable y la sobrecarga con escapeCharacter que hace que funcione en SQL Server, SQLite y PostgreSQL.
- Columna json nativa vs nvarchar(max) para almacenar JSON en SQL Server con EF Core 11
Usa el tipo json nativo en SQL Server 2025 y Azure SQL: EF Core 11 obtiene de él JSON_CONTAINS, JSON_VALUE tipado, modify() en el lugar e índices JSON. Quédate en nvarchar(max) para SQL Server 2019/2022, herramientas heredadas o un esquema que debas poder revertir.
- Solución: PublishAot junto con EFOptimizeContext agota la memoria durante una compilación de EF Core
La generación del modelo de EF Core en tiempo de compilación volvía a invocar MSBuild hasta agotar la RAM. Actualiza Tasks y Design a 10.0.10+ y, en EF Core 11, elimina EFOptimizeContext.
- Solución: AS JSON option can be specified only for column of nvarchar(max) type in WITH clause
EF Core emite [col] json '$.path' AS JSON dentro de OPENJSON WITH, y Azure SQL lo rechaza con el Msg 13618. Actualiza a EF Core 10.0.11+ o baja el nivel de compatibilidad del proveedor a 160.
- Solución: Complex entry original ordinal '-1' is invalid al guardar una colección compleja con ToJson
Actualiza Microsoft.EntityFrameworkCore a 10.0.10 o posterior. Antes de eso, hacer crecer una colección anidada bajo una segunda propiedad compleja con ToJson rompía SaveChanges.
- Solución: The complex type collection must be initialized to a non-null value
En EF Core 10.0.x, poner en null una propiedad compleja que contiene una colección de dos elementos dentro de una colección compleja ToJson rompe DetectChanges. Corregido en 11.0.0-rc.1.
- Solución: MissingMethodException 'AbstractionsStrings.ArgumentIsEmpty' tras actualizar EF Core Tools
dotnet ef lanza MissingMethodException en ArgumentIsEmpty porque Tools 10.0.6 dejó de traer un Microsoft.EntityFrameworkCore.Design compatible. Fija Design a tu versión de EF Core.
- Cómo usar bloqueo pesimista con UPDLOCK y SELECT ... FOR UPDATE en EF Core 11
EF Core 11 sigue sin tener una API de bloqueo. Así se toma un bloqueo de fila real con FromSql: WITH (UPDLOCK, ROWLOCK) en SQL Server, FOR UPDATE en PostgreSQL, la trampa de la subconsulta que amplía el bloqueo en silencio, NOWAIT y SKIP LOCKED, reintentos ante interbloqueos, y qué hacer cuando la fila todavía no existe.
- Cómo escribir un value converter de EF Core 11 que mapee un null de la base de datos a un valor no nulo en código
EF Core nunca pasa null a un value converter por defecto. Aquí está el constructor interno convertsNulls que cambia eso, la llamada IsRequired(false) de la que depende, por qué no puede funcionar con enums ni otros tipos de valor, la trampa WHERE col = NULL que crea, y los dos patrones que resuelven el problema sin usar una API interna.
- ¿Qué es un interceptor de EF Core y cuándo necesitas uno?
Un interceptor de EF Core es una clase que EF llama antes y después de operaciones como ejecutar un comando o SaveChanges, y que puede modificarlas o suprimirlas, no solo observarlas. Aquí están los siete puntos de intercepción de EF Core 11, las reglas de registro y ciclo de vida, y los casos en los que un filtro de consulta o el registro de eventos son la mejor respuesta.
2026 / 08
- Fix: 23505: duplicate key value violates unique constraint en un insert concurrente de EF Core
El comprobar-luego-insertar de tu handler no es atómico. Captura PostgresException con SqlState 23505, o colapsa todo en una sola sentencia INSERT ... ON CONFLICT. EnableRetryOnFailure no te va a ayudar.
- Solución: CREATE DATABASE permission denied in database 'master' al ejecutar dotnet ef database update
Migrate() de EF Core siempre comprueba si la base de datos existe y la crea si no, desde una conexión a master fija en el código. Otorga CREATE ANY DATABASE, arregla el acceso del login a la base de datos existente, o genera un script SQL idempotente.
- Solución: Model building is not supported when publishing with NativeAOT en una compilación de .NET MAUI para iOS
Las compilaciones de iOS ponen DynamicCodeSupport=false, así que EF Core se niega a construir el modelo aunque nunca hayas activado NativeAOT. Publica un modelo compilado más consultas precompiladas, o vuelve a activar el intérprete.
- Cómo escribir predicados LINQ reutilizables que EF Core pueda traducir en Where, Select y OrderBy
Un método auxiliar que devuelve bool lanza "could not be translated". Un Expression<Func<T, bool>> no. Así se componen, anidan y reutilizan árboles de expresión en EF Core 11 sin LINQKit, con el SQL real de cada caso.
- Solución: "An exception was thrown while attempting to evaluate a LINQ query parameter expression" en EF Core 11
EF Core lanza esto cuando una parte de tu consulta evaluada en el cliente falla mientras EF la evalúa. Lee InnerException, activa EnableSensitiveDataLogging y saca la comprobación de null fuera de la lambda.
- Cómo generar una clave primaria desde una secuencia de base de datos al insertar en EF Core 11
Mueve una clave de IDENTITY a una secuencia de SQL Server en EF Core 11 con UseSequence: el SQL exacto que emite EF, por qué de pronto funcionan los valores de clave explícitos sin IDENTITY_INSERT, la secuencia bigint alimentando una columna int y los huecos que tienes que contemplar en el diseño.
- Cómo usar IDbContextFactory<T> desde un servicio singleton en Blazor
Un singleton no puede inyectar un DbContext, pero sí puede inyectar IDbContextFactory<T>, porque AddDbContextFactory registra la fábrica como singleton por omisión. Crea y libera un contexto por llamada, nunca guardes la instancia.
- Solución: dotnet tool install --global dotnet-ef lanza un error
Todas las formas en que dotnet tool install --global dotnet-ef falla en el SDK de .NET 10, con el mensaje exacto y el código de salida de cada una: ya instalado, versión no encontrada, degradación bloqueada, conflicto de shim, feed de NuGet caído y el desajuste de runtime que solo se rompe despues de que la instalación termina bien.
- Cómo llamar a un procedimiento almacenado y mapear sus resultados en EF Core 11
Usa FromSql sobre un DbSet cuando el procedimiento devuelve filas completas de una entidad, Database.SqlQuery<T> cuando devuelve una proyección, y ExecuteSql cuando no devuelve nada. Nunca encadenes un operador LINQ sobre un EXEC, y nunca leas un parámetro de salida antes de que el lector se haya liberado.
- Cómo renombrar una tabla en una migración de EF Core 11 sin perder datos
EF Core genera RenameTable cuando cambias el nombre de la tabla, pero DropTable más CreateTable cuando renombras la clase de entidad. Aquí verás cómo distinguir ambos casos, el truco de ToTable que hace gratis el renombrado de una clase, y el bug de renombrado de columnas que intercambia tus datos en silencio.
- WebApplicationFactory vs Testcontainers para pruebas de integración en ASP.NET Core
Elige la configuración para pruebas de integración ASP.NET Core según lo que debas verificar: routing HTTP, motor de base de datos o imagen publicada.
- Cómo implementar concurrencia optimista con un token rowversion en EF Core 11
Agrega un token de concurrencia rowversion en EF Core 11: la configuración con [Timestamp] e IsRowVersion, el SQL que EF realmente emite, cómo capturar DbUpdateConcurrencyException, gana la base de datos vs gana el cliente vs fusión, APIs desconectadas con ETags y las cinco trampas que lo desactivan en silencio.
- Cómo guardar un enum como string en EF Core 11 con un value converter
Guarda los enums de C# como strings legibles en lugar de ints en EF Core 11: HasConversion, configuración masiva para todos los enums, la trampa de nvarchar(max), el problema del ordenamiento y cómo migrar una columna int existente.
2026 / 07
- Solución: Your startup project doesn't reference Microsoft.EntityFrameworkCore.Design
Agrega Microsoft.EntityFrameworkCore.Design al proyecto de inicio que compila dotnet ef, no al proyecto que contiene tu DbContext, y pasa -s en soluciones por capas.
- Solución: "The model for context 'X' has pending changes" en EF Core 11
EF Core lanza PendingModelChangesWarning cuando tu modelo ya no coincide con el último snapshot de migración. Agrega la migración o corrige el falso positivo.
- Cómo aplicar migraciones de EF Core 11 en producción con dotnet ef migrations bundle
Una guía completa para implementar cambios de esquema de EF Core 11 con bundles de migración: compilar efbundle en CI, la trampa de appsettings.json con cadenas de conexión con nombre, bundles autocontenidos y el RID musl de Alpine, el bloqueo de migraciones desde EF Core 9, revertir con una migración objetivo y por qué las transacciones por migración no te salvan en MySQL.
- Tipos complejos vs entidades propias en EF Core 11: ¿cuál deberías elegir?
En EF Core 11, usa por defecto tipos complejos para los objetos de valor y recurre a entidades propias solo cuando necesites una tabla separada o una colección mapeada a sus propias filas.
- TPH vs TPT vs TPC para mapeo de herencia en EF Core 11: ¿cuál deberías elegir?
En EF Core 11, usa TPH de forma predeterminada para casi toda jerarquía, recurre a TPC solo cuando consultas casi siempre un único tipo hoja y un benchmark demuestra que gana, y usa TPT solo cuando una restricción externa te obligue.
- Solución: System.InvalidOperationException: Sequence contains no elements
Esta excepción significa que llamaste a .First() o .Single() sobre una secuencia vacía. Usa FirstOrDefault/SingleOrDefault y comprueba el null, protege la consulta o corrige por qué la fuente está vacía.
- Cómo registrar el SQL que genera EF Core 11
Observa el SQL exacto que Entity Framework Core 11 envía a tu base de datos, con valores de parámetros, usando LogTo, Microsoft.Extensions.Logging y ToQueryString.
- Solución: "The property could not be mapped, because it is not a supported primitive type or a valid entity type" en EF Core 11
EF Core encontró una propiedad que no sabe almacenar. Mapéala como tipo complejo, conviértela con HasConversion, dale una clave o ignórala con [NotMapped].
- Cómo configurar el mapeo de herencia tabla por jerarquía (TPH) en EF Core 11
TPH es la estrategia de herencia predeterminada de EF Core: una tabla, una columna discriminadora. Aquí verás cómo configurar el discriminador, compartir columnas, manejar propiedades derivadas anulables y los detalles en EF Core 11.
- Cómo mapear un complex type en lugar de una entidad propia en EF Core 11
Las entidades propias arrastran una clave oculta y una identidad por referencia que chocan con los objetos de valor. Aquí verás cómo mapear un objeto de valor como complex type en EF Core 11, cuándo cambiar y las trampas.
- Migrar del seeding con HasData a UseAsyncSeeding en EF Core 11
Guia paso a paso para mover los datos de seed de HasData a UseSeeding y UseAsyncSeeding en EF Core 11, incluida la trampa de la migracion DeleteData que borra tus filas existentes si la pasas por alto.
- Filtros de consulta con nombre vs un único filtro de consulta global en EF Core 11: ¿cuál usar?
Ambos generan el mismo SQL. Recurre a los filtros con nombre solo cuando necesites desactivar un predicado de forma independiente; un único filtro combinado es más simple para una sola preocupación en EF Core 11.
- Solución: "The LINQ expression could not be translated" en EF Core 11
EF Core 11 lanza esto cuando un Where u OrderBy llama a un método que no puede convertir en SQL. Reescribe el predicado con operadores traducibles, o trae los datos al cliente con AsEnumerable primero.
- Solución: "The required column 'X' was not present in the results of a 'FromSql' operation" en EF Core 11
EF Core lanza esto cuando tu SQL en crudo no devuelve todas las columnas que mapea la entidad, o los nombres no coinciden. Devuelve todas las columnas mapeadas con nombres coincidentes, o consulta un tipo escalar o sin clave.
- Cómo usar filtros de consulta con nombre para borrado lógico y multi-tenancy en EF Core 11
Aplica dos filtros de consulta globales independientes a la misma entidad en EF Core 11: un filtro de borrado lógico y un filtro de tenant, cada uno con nombre para poder desactivar uno sin el otro con IgnoreQueryFilters.
2026 / 06
- HasData vs UseSeeding para sembrar datos en EF Core 11: cual deberias usar?
Usa HasData solo para datos de referencia fijos y propios del modelo. Usa UseSeeding y UseAsyncSeeding para todo lo demas en EF Core 11. Una comparacion lado a lado con las reglas que fuerzan la decision.
- Solución: FOREIGN KEY constraint failed al eliminar una entidad en EF Core 11
EF Core lanza FOREIGN KEY constraint failed porque el padre todavía tiene dependientes que la base de datos se niega a dejar huérfanos. Carga los hijos, haz la relación opcional o configura OnDelete.
- Solución: No service for type 'Microsoft.EntityFrameworkCore.DbContextOptions' has been registered
EF Core lanza esto cuando AddDbContext nunca se ejecutó, se ejecutó después de Build o el constructor del contexto recibe el DbContextOptions equivocado. Registra antes de Build y usa DbContextOptions<TuContexto>.
- Solución: The seed entity for entity type 'X' cannot be added because a non-zero value is required for property 'Id'
HasData siembra una entidad con clave generada por el almacén pero sin valor explícito. Da a cada fila un Id estable distinto de cero, o usa UseSeeding para claves generadas.
- Cómo hacer paginación por keyset (cursor) en EF Core 11
Reemplaza Skip/Take con una cláusula WHERE que avanza más allá de la última fila que viste. Ordena por una clave totalmente única, lleva los valores de la última fila como cursor, y EF Core 11 convierte la página siguiente en un seek de índice en lugar de un escaneo OFFSET.
- Cómo mapear y consultar columnas JSON en EF Core 11
Mapea un tipo anidado a una sola columna JSON con ComplexProperty(...).ToJson(), deja que EF Core 11 lo almacene en el tipo json nativo de SQL Server 2025 y luego consúltalo con LINQ que se traduce a JSON_VALUE, JSON_CONTAINS y JSON_PATH_EXISTS.
- Cómo sembrar una relación muchos a muchos en EF Core 11
Siembra la tabla de unión de una relación muchos a muchos en EF Core 11: las claves sombra implícitas que debes nombrar tú mismo, el patrón UsingEntity HasData y la alternativa de tiempo de ejecución UseSeeding que funciona con navegaciones de salto.
- Cómo sembrar datos con UseSeeding y UseAsyncSeeding en EF Core 11
Siembra datos de referencia de la forma correcta en EF Core 11 con UseSeeding y UseAsyncSeeding: dónde configurarlos, cuándo se ejecutan, la comprobación de idempotencia que no puedes omitir y por qué debes implementar ambos.
- AsNoTracking vs AsNoTrackingWithIdentityResolution en EF Core 11: ¿cuál deberías usar?
Usa AsNoTracking por defecto para consultas de solo lectura. Recurre a AsNoTrackingWithIdentityResolution únicamente cuando el grafo de resultados contiene la misma entidad más de una vez y tu código depende de recibir una sola instancia compartida.
- El nuevo analizador EF1004 de EF Core 11 detecta un error asíncrono silencioso
EF Core 11 Preview 5 incluye el analizador EF1004. Marca ToAsyncEnumerable() sobre un IQueryable para que no enumeres una consulta de base de datos de forma síncrona dentro de un await foreach.
- Solución: The entity type 'X' requires a primary key to be defined en EF Core 11
EF Core no encuentra una clave para tu tipo. Nombra una propiedad Id o {Type}Id, agrega [Key], llama a HasKey o, si es una vista o SQL crudo, llama a HasNoKey.
- Solución: The configured execution strategy 'SqlServerRetryingExecutionStrategy' does not support user-initiated transactions
EnableRetryOnFailure choca con BeginTransaction. Envuelve toda la transaccion en db.Database.CreateExecutionStrategy().ExecuteAsync(...) para que se reintente como una unidad.
- Cómo usar los interceptores de EF Core 11 para auditoría
Marca columnas CreatedBy/ModifiedOn y escribe un rastro completo de cambios con un ISaveChangesInterceptor en EF Core 11, incluyendo los detalles de inyección de dependencias, usuario actual y ExecuteUpdate.
- EF Core ExecuteUpdate frente a cargar entidades y SaveChanges: ¿cuál deberías usar?
Una guía de decisión y un benchmark real para EF Core 11: usa ExecuteUpdate para escrituras basadas en conjuntos por predicado, y la ruta cargar-luego-SaveChanges solo cuando necesitas el rastreador de cambios, los interceptores o un grafo de objetos complejo.
- Migrar de EF Core 6 a EF Core 11: los cambios incompatibles que de verdad duelen
Una guía de migración con versiones fijadas, de EF Core 6.0 a EF Core 11.0, recorriendo los cambios incompatibles de EF7, 8, 9, 10 y 11 que rompen apps reales: Encrypt=True, Contains con OPENJSON, PendingModelChangesWarning, la columna json nativa y la división de SqlClient 7.0.
- Solución: ObjectDisposedException: Cannot access a disposed context instance
Tu tarea fire-and-forget capturó un DbContext con ámbito de solicitud que el ámbito de DI ya había liberado. Resuelve un contexto nuevo dentro de la tarea con IServiceScopeFactory o IDbContextFactory.
- EF Core 11 Preview 4: Deja de reescribir --project y --startup-project con .config/dotnet-ef.json
EF Core 11 Preview 4 permite que la herramienta dotnet ef lea los valores de opciones predeterminados desde un archivo .config/dotnet-ef.json, para que las soluciones divididas ya no te obliguen a pasar --project y --startup-project en cada comando.
- Cómo usar la división de consultas para evitar una explosión cartesiana en EF Core 11
Cuando haces Include de dos colecciones hermanas, EF Core 11 devuelve el producto cartesiano y tu número de filas se dispara. Aquí tienes cómo lo arregla AsSplitQuery, cómo activarlo de forma global y los detalles de consistencia y orden que debes vigilar.
2026 / 05
- Cómo usar ExecuteUpdate y ExecuteDelete para escrituras masivas en EF Core 11
Una guía completa de ExecuteUpdate y ExecuteDelete en EF Core 11: el SQL que generan, la trampa del rastreador de cambios que sobrescribe en silencio tu escritura masiva, las transacciones, el control de concurrencia con el conteo de filas afectadas y los setters por delegado de EF Core 10 que permiten construir actualizaciones condicionales con simples sentencias if.
- EF Core 11 Preview 4: las columnas de período de las tablas temporales por fin pueden ser propiedades reales
EF Core 11 Preview 4 elimina la antigua restricción de propiedad shadow en las tablas temporales de SQL Server. PeriodStart y PeriodEnd ahora pueden ser propiedades CLR normales, configuradas con lambdas HasPeriodStart y HasPeriodEnd fuertemente tipadas.
- Consultas compiladas de EF Core vs SQL sin procesar vs Dapper: cual gana en el camino de lectura?
Para rutas con muchas lecturas en .NET 11, EF Core puro con AsNoTracking queda dentro de ~5% de Dapper. Usa consultas compiladas en una ruta caliente de fila unica perfilada, y Dapper solo para la menor latencia o el SQL que LINQ no puede expresar.
- IEnumerable vs IAsyncEnumerable vs IQueryable en C#: ¿cuál debe devolver el método?
Tres interfaces de secuencia, tres modelos de ejecución. Usa IQueryable cuando una base de datos pueda traducir la consulta, IAsyncEnumerable cuando el productor es asíncrono y quieres transmitir, IEnumerable para todo lo demás en memoria.
- EF Core 11 vs Dapper para inserciones masivas: benchmark real
Para inserciones masivas en .NET 11, ni EF Core ni Dapper ganan. Lo hace SqlBulkCopy. Este es el benchmark, el porqué y el asiento que merece cada herramienta.
- Fix: A possible object cycle was detected
System.Text.Json se niega a serializar grafos con referencias cíclicas. Configura ReferenceHandler.IgnoreCycles, proyecta a un DTO o marca el puntero hacia atrás con [JsonIgnore]. Preserve es un último recurso.
- Solución: SqlException: Timeout expired durante migraciones de EF Core
Las migraciones usan el DbContext de diseño, no tu CommandTimeout de ejecución. Configura el tiempo de espera con UseSqlServer(o => o.CommandTimeout(...)), con Command Timeout en la cadena de conexión, o con Database.SetCommandTimeout antes de Migrate().
- Fix: dotnet ef migrations add falla con 'Unable to create an object of type DbContext'
Las herramientas en tiempo de diseño de EF Core no pudieron instanciar tu DbContext. Expón un host con WebApplication.CreateBuilder, apunta al startup project correcto o implementa IDesignTimeDbContextFactory.
- Solución: The instance of entity type cannot be tracked because another instance with the same key value is already being tracked
EF Core 11 lanza esta excepción cuando dos objetos comparten clave primaria dentro de un DbContext. Desvincula el viejo o actualízalo en el lugar. AsNoTracking en la lectura previene la colisión.
- Solución: A second operation was started on this context instance before a previous operation completed
EF Core lanza esta excepción cuando dos await corren en paralelo sobre el mismo DbContext. Espera cada llamada de forma secuencial, u obtén un DbContext nuevo por unidad de trabajo concurrente vía IDbContextFactory.
- Solución: System.InvalidOperationException: No connection string named 'DefaultConnection' could be found
Si GetConnectionString devuelve null en .NET 11, a tu appsettings.json le falta la clave, no se copia a la salida del build, o se está seleccionando el archivo de entorno equivocado. Tres comprobaciones resuelven el 95% de los casos.
- Cómo detectar consultas N+1 en EF Core 11
Una guía práctica para identificar consultas N+1 en EF Core 11: cómo aparece el patrón en código real, cómo exponerlo mediante registros, interceptores de diagnóstico, OpenTelemetry y una prueba que rompe la compilación cuando una ruta crítica regresa.
- Cómo usar consultas compiladas con EF Core en rutas calientes
Una guía práctica de las consultas compiladas en EF Core 11: cuándo EF.CompileAsyncQuery realmente gana, el patrón de campo estático, las trampas con Include y tracking, y cómo medir antes y después para demostrar que el ceremonial extra valió la pena.
- Cómo escribir pruebas de integración contra un SQL Server real con Testcontainers
Una guía completa para ejecutar pruebas de integración de ASP.NET Core contra un SQL Server 2022 real usando Testcontainers 4.11 y EF Core 11: cableado de WebApplicationFactory, IAsyncLifetime, sustitución del registro del DbContext, aplicación de migraciones, paralelismo, limpieza con Ryuk y trampas de CI.
2026 / 04
- Cómo precalentar el modelo de EF Core antes de la primera consulta
EF Core construye su modelo conceptual de forma diferida en el primer acceso al DbContext, por lo que la primera consulta en un proceso recién iniciado es varios cientos de milisegundos más lenta que cualquier consulta posterior. Esta guía cubre las tres soluciones reales en EF Core 11: un IHostedService de arranque que toca Model y abre una conexión, dotnet ef dbcontext optimize para enviar un modelo precompilado, y las trampas de la clave de caché que reconstruyen el modelo silenciosamente.
- Cómo simular DbContext sin romper el rastreo de cambios
Simular DbContext directamente rompe silenciosamente el ChangeTracker, por eso Microsoft lo desaconseja. Esta guía muestra los dos patrones que sí funcionan en EF Core 11: SQLite en memoria con una conexión que se mantiene abierta para que se ejecute el ChangeTracker real, y el patrón repositorio que saca por completo a EF Core de la prueba.
- Cómo usar IAsyncEnumerable<T> con EF Core 11
Las consultas de EF Core 11 implementan IAsyncEnumerable<T> directamente. Aquí está cómo hacer streaming de filas con await foreach, cuándo preferirlo sobre ToListAsync, y las trampas alrededor de conexiones, tracking y cancelación.
- Cómo usar records con EF Core 11 correctamente
Una guía práctica para mezclar records de C# y EF Core 11. Dónde encajan los records, dónde rompen el change tracking, y cómo modelar value objects, entidades y proyecciones sin pelearte con el framework.
- EF Core 11 poda joins de referencia innecesarios en split queries
EF Core 11 Preview 3 remueve joins to-one redundantes de split queries y tira claves ORDER BY innecesarias. Un escenario reportado se volvió 29% más rápido, otro 22%. Así se ve el SQL ahora.
- EF Core 11 agrega GetEntriesForState para saltarse DetectChanges
EF Core 11 Preview 3 introduce ChangeTracker.GetEntriesForState, un enumerador filtrado por state que evita un pase extra de DetectChanges en hot paths como interceptors de SaveChanges y hooks de audit.
- EF Core 11 prende transactional batches de Cosmos DB por default
EF Core 11 agrupa writes de Cosmos DB en transactional batches por container y partition en cada SaveChanges, dando atomicidad best-effort y menos roundtrips sin cambios de código.
- EF Core 11 agrega búsqueda vectorial nativa de SQL Server con índices DiskANN
EF Core 11 Preview 2 soporta VECTOR_SEARCH() de SQL Server 2025 y los índices vectoriales DiskANN directamente desde LINQ. Aquí está cómo configurar el índice, ejecutar consultas aproximadas, y qué cambia del enfoque VectorDistance de EF Core 10.
- EF Core 11 te permite crear y aplicar una migración en un solo comando
El comando dotnet ef database update ahora acepta --add para crear y aplicar una migración en un solo paso. Aquí está cómo funciona, por qué importa para contenedores y .NET Aspire, y qué tener en cuenta.