在 EF Core 2 中,我能够使用FromSql
和发出UPDATE-OUTPUT
查询在单个查询中更新和检索实体。
它看起来像这样:
return await _baseDbContext.MyEntity
.FromSql($@"UPDATE {_baseDbContext.SchemaName}.MyEntity
SET STATUS = ""InProgress"",
UpdatedAt = SYSDATETIMEOFFSET()
OUTPUT
INSERTED.Id, INSERTED.Name,
INSERTED.Status, INSERTED.Deleted, INSERTED.CreatedAt, INSERTED.CreatedBy, INSERTED.CreatedByUserId,
INSERTED.UpdatedAt, INSERTED.UpdatedBy, INSERTED.UpdatedByUserId, INSERTED.Version
FROM { _baseDbContext.SchemaName}.MyEntity le
WHERE le.Status = ""Failed""")
.ToListAsync(cancellationToken);
现在升级到EF Core 3后,它抱怨
"FromSqlRaw 或 FromSqlInterpolated 是用不可组合的 SQL 和在其上编写的查询调用的。请考虑在 FromSqlRaw 或 FromSqlInterpolated 方法之后调用
AsEnumerable
,以便在客户端执行组合。
如果我只是输入SELECT
查询,我就可以执行FromSqlRaw
或FromSqlInterpolated
。
EF 核心 3 是否不再支持UPDATE-OUTPUT
查询?
根据此处发布的答案添加.IgnoreQueryFilters()
来解决它: 包含在 EF Core 3.1 中的 FromSqlRaw 和存储过程中