よく考えればそりゃそうか感はあるんですが。
Entity Framework 3.0 Coreでは破壊的変更としてLINQ クエリがクライアントで評価されなくなった
という修正があります。
.NETの関数を内部的に使っているなどして、SQLに変換できない系統のものが動かなくなったんですが、それに関係なさそうな LastOrDefault
も利用できなくなっていました。
例えばこんな感じのLINQ。
await Context.Set<TBL>()
.Where(r => r.COLUMN1 == "hoge")
.Select(s => s.COLUMN2)
.LastOrDefaultAsync();
GitHubのIssueを見てると該当するものが。
In EF Core 3.1: calling LastOrDefault(), Last(), LastOrDefaultAsync() or LastAsync() on entity with OwnsOne throws InvalidOperationException. FirstOrDefault is working. Steps to reproduce I have a ...
対応としては OrderByDescending()
を使って明示的に降順に並び替えてからFirstOrDefaultAsync()
を呼び出す感じ。
LastOrDefaultAsync()
だと結果が確定的でない可能性があるので、厳密に判定できるようにこういう対応をしたようで。
つい最近のEFCoreへのP-rで、もう少しわかりやすいエラーメッセージになるようです。