{"record":{"id":"eb3a4931581faf64","repo":"dotnet/efcore","slug":"the-required-column-column-was-not-present-in","errorCode":null,"errorMessage":"The required column '{column}' was not present in the results of a 'FromSql' operation.","messagePattern":"The required column '(.+?)' was not present in the results of a 'FromSql' operation\\.","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/EFCore.Relational/Query/Internal/BufferedDataReader.cs","lineNumber":1241,"sourceCode":"                    index[_columnNames[i]] = i;\n                }\n\n                return index;\n            }\n        }\n\n        private void InitializeFields()\n        {\n            var fieldCount = FieldCount;\n            if (FieldCount < _columns.Count)\n            {\n                // Non-composed FromSql\n                var readerColumns = _fieldNameLookup.Value;\n\n                var firstMissingColumn = _columns.Select(c => c?.Name).FirstOrDefault(c => c != null && !readerColumns.ContainsKey(c));\n                if (firstMissingColumn != null)\n                {\n                    throw new InvalidOperationException(RelationalStrings.FromSqlMissingColumn(firstMissingColumn));\n                }\n\n                throw new InvalidOperationException(RelationalStrings.TooFewReaderFields(_columns.Count, FieldCount));\n            }\n\n            _columnTypeCases = Enumerable.Repeat(TypeCase.Empty, fieldCount).ToArray();\n            _ordinalToIndexMap = Enumerable.Repeat(-1, fieldCount).ToArray();\n            if (_columns.Count > 0\n                && _columns.Any(e => e?.Name != null))\n            {\n                // Non-Composed FromSql\n                var readerColumns = _fieldNameLookup.Value;\n\n                _indexMap = new int[_columns.Count];\n                var newColumnMap = new ReaderColumn?[fieldCount];\n                for (var i = 0; i < _columns.Count; i++)\n                {\n                    var column = _columns[i];","sourceCodeStart":1223,"sourceCodeEnd":1259,"githubUrl":"https://github.com/dotnet/efcore/blob/3a2006ef569de08368d59db5e1468aa8f407e4f8/src/EFCore.Relational/Query/Internal/BufferedDataReader.cs#L1223-L1259","documentation":"Thrown by BufferedDataReader when a non-composed FromSqlRaw/FromSqlInterpolated query returns a result set that is missing at least one column the entity expects. EF looks up each expected column name in the reader's field-name map and reports the first one it cannot find.","triggerScenarios":"context.Users.FromSqlRaw(\"SELECT Id, Name FROM Users\") when the User entity also maps a property to column Email. InitializeFields detects FieldCount < _columns.Count and a missing column name.","commonSituations":"Raw SQL projection that omits a mapped column. Stored procedure that returns a subset of columns. Renaming a column in SQL but not the entity. Composite/TPH queries where a discriminator column is missing.","solutions":["Make the raw SQL return every column the entity maps (including key, discriminator, and concurrency token columns).","Project into an anonymous/non-mapped DTO instead of an entity type to allow fewer columns.","Use SELECT * (or the specific full column list) so all mapped columns are present.","Verify column names in SQL match the mapped column names (case sensitivity depends on provider)."],"exampleFix":"// before\nvar users = dbContext.Users\n    .FromSqlRaw(\"SELECT Id, Name FROM Users\")\n    .ToList(); // User also maps Email\n\n// after\nvar users = dbContext.Users\n    .FromSqlRaw(\"SELECT Id, Name, Email FROM Users\")\n    .ToList();","handlingStrategy":"validation","validationCode":"static void EnsureFromSqlCoversColumns(IModel model, Type entityType, string sql, IReadOnlyList<string> readerColumns)\n{\n    var mapped = model.FindEntityType(entityType)!\n        .GetProperties().Select(p => p.GetColumnName()).Where(n => n is not null).Cast<string>();\n    foreach (var c in mapped)\n        if (!readerColumns.Contains(c, StringComparer.OrdinalIgnoreCase))\n            throw new InvalidOperationException($\"FromSql result is missing mapped column '{c}'.\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Return every mapped column from raw SQL (or use SELECT *).","Prefer LINQ over FromSql for entity materialization when possible.","Project into DTOs when only a subset of columns is needed."],"tags":["ef-core","query","fromsql","materialization"],"backgroundTag":null,"analyzedSha":"3a2006ef569de08368d59db5e1468aa8f407e4f8","analyzedAt":"2026-08-11T23:42:04.146Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}