EntityFrameworkモデルに奇妙な動作が見られます。次のようなクエリがあります。
var rows = ( from alarm in context.Alarms
join temp in context.ListDetails on alarm.ListDetailId equals temp.ListDetailId into entries from entry in entries.DefaultIfEmpty()
join read in context.Reads on alarm.ReadId equals read.ReadId
join plate in context.Images on alarm.ReadId equals plate.ReadId
where alarm.IActive == 1 && ! alarm.TransmittedAlarm
where read.IActive == 1
where plate.IActive == 1 && plate.ImageTypeId == 2
select new { alarm, entry, read, plate } ).ToArray();
クエリは、列名のアルファベット順にすべての列を返します。結果セットのいくつかの行では、この列がNULLであることがわかります。デバッガーでrows変数を展開すると、行全体がnullであることがわかります。
編集:いくつかの説明。
「最初の列」とは、最初の行の最初の列を意味します。つまり、「SELECT A、B、C FROM ...」では、Aを意味します。EntityFrameworkが構築するクエリがすべての結合された結果セットの列はアルファベット順に、最初の列はアルファベット順にnull可能であり、一部の行ではnullです。
問題の列は主キーではありません。主キーの場合、nullにすることはできません。
Entity Frameworkは、返されたデータの行をオブジェクトに処理するときに、各行の最初の列の値を調べます。その列がnullの場合、その列に対応するプロパティがnullに設定されているオブジェクトではなく、行に対してnullが返されます。
これは特に左外側の結合とは何の関係もないと思います。私のクエリがそれを使用しているのはたまたまです。ただし、これを検証するためのテストは行っていないので、これは単なる仮定です。
誰かがこれを見たことがありますか?誰かがこれを修正していますか?
トニー