2017-09-20 48 views
3

後に「いいえ強制演算子は型の間で定義されていない」、我々はこのように見えたメソッドを持っていましたわたしたちのため。すべての.NETのコア2.0 & EFコア2.0にプロジェクト全体をアップグレードした後、この方法は、この例外がスローされます。イーガーロードは、.NETのコア1.xでは、.NETのコア/ EFコア2.0アップグレード

のSystem.InvalidOperationExceptionが発生しました:いいえ強制演算子はタイプ「PaperPointerRecord」と「PaperRecord」の間に定義されていません。

この例外は、このブロックで発生している:

var record = await query.Include(_ => _.Paper) 
         .ThenInclude(_ => _.PaperColors) 
         .Select(_ => new 
            { 
             PaperRecord = _.Paper, 
             PaperPointerRecord = _ 
            }) 
         .SingleOrDefaultAsync(); 

私は、エラーが消えるようにそれを熱心ロードを削除し、作成した場合、私は意図した結果のいずれかを得ることはありません。

var record = await query.Select(_ => new 
            { 
             PaperRecord = _.Paper, 
             PaperPointerRecord = _ 
            }) 
         .SingleOrDefaultAsync(); 

私は、このためにMicrosoft Documentationをチェックしましたし、私たちは熱心ロードと間違って何かをやっていることを示しが示されている何も表示されません。

答えて

2

Includeは、投影を返しているときには役に立ちません。Includeは無視されます(無視されたことについては、hereが含まれています)。

「意図した結果」によってrecord.PaperRecord.Paperに値を設定したい場合は、その値を投影に含めるだけです。 EFは関係を結びつけます。

new 
{ 
    PaperRecord = _.Paper, 
    PaperPointerRecord = _, 
    PaperColor = _.Paper.PaperColor, 
} 
+0

私はあなたの評価に完全に同意します。私は基本的にあなたが提案したようにこれを解決しました。最終的にコードは縮小され、より簡単になります。私が気にしていたことは、1.xと2.0でうまく機能していたということでした。いくつかの点で、それは物事をより良くするのに役立った。しかし、この状況は、私たちに多くのコードを書き直して書き直す必要があり、少し強制されました。 – Ristogod

関連する問題