dotnet/efcore · error · InvalidOperationException
The property '{entityType}.{property}' is mapped to a result
Error message
The property '{entityType}.{property}' is mapped to a result column of the stored procedure '{sproc}', but store-generated values are not supported for Delete stored procedures. What it means
Thrown when any result column is configured on a Delete stored procedure. Deletes do not return store-generated values, so result columns are unsupported on delete sprocs; the validator unconditionally rejects any result column whose PropertyName is non-null on a delete sproc.
Source
Thrown at src/EFCore.Relational/Infrastructure/RelationalModelValidator.cs:689
if (resultColumn.PropertyName == null)
{
continue;
}
switch (storeObjectIdentifier.StoreObjectType)
{
case StoreObjectType.InsertStoredProcedure:
case StoreObjectType.UpdateStoredProcedure:
if (!storeGeneratedProperties.ContainsKey(property.Name))
{
throw new InvalidOperationException(
RelationalStrings.StoredProcedureResultColumnNotGenerated(
entityType.DisplayName(), resultColumn.PropertyName, storeObjectIdentifier.DisplayName()));
}
break;
case StoreObjectType.DeleteStoredProcedure:
throw new InvalidOperationException(
RelationalStrings.StoredProcedureResultColumnDelete(
entityType.DisplayName(), resultColumn.PropertyName, storeObjectIdentifier.DisplayName()));
default:
Check.DebugFail("Unexpected stored procedure type: " + storeObjectIdentifier.StoreObjectType);
break;
}
}
var originalValueProperties = new Dictionary<string, IProperty>(properties);
var parameterNames = new HashSet<string>();
foreach (var parameter in sproc.Parameters)
{
IProperty? property = null;
if (parameter.PropertyName != null)
{
if (parameter.ForOriginalValue == true)
{
if (!originalValueProperties.TryGetAndRemove(parameter.PropertyName, out property))View on GitHub (pinned to dbf9771522)
Solutions
- Remove all HasResultColumn calls from the delete stored procedure.
Example fix
// before
.DeleteStoredProcedure("sp_DeleteBlog", sp =>
{
sp.HasResultColumn("Id");
});
// after
.DeleteStoredProcedure("sp_DeleteBlog", sp => { }); Defensive patterns
Strategy: validation
Validate before calling
foreach (var et in modelBuilder.Model.GetEntityTypes())
{
var del = et.GetDeleteStoredProcedure();
if (del != null && del.ResultColumns.Any(r => r.PropertyName != null))
throw new InvalidOperationException($"{et.DisplayName()} delete sproc has result columns");
} Try / catch
try { _ = ctx.Model; } catch (InvalidOperationException ex) when (ex.Message.Contains("not supported for Delete stored procedures")) { /* remove result columns from the delete sproc */ } Prevention
- Never call HasResultColumn on a delete stored procedure.
- Review sproc builders per operation type rather than copy-pasting across insert/update/delete.
When it happens
Trigger: .DeleteStoredProcedure().HasResultColumn(...); reusing an insert/update builder pattern on a delete sproc.
Common situations: Copy-pasting result-column config from an insert sproc onto a delete sproc.
Related errors
- No property named '{property}' found on the entity type '{en
- The result column '{column}' cannot be added to the stored p
- The property '{entityType}.{property}' is mapped to a result
- Current value parameter '{parameter}' is not allowed on dele
- The property '{entityType}.{property}' is mapped to a parame
AI-assisted analysis of dotnet/efcore@dbf9771522 (2026-08-06).
Data as JSON: /api/errors/7d2738fd52261036.
Report an issue: GitHub.