2016-04-13 2 views
0

私はこの射影を実行すると、カウントは私のデータベースの人々の量に等しい:のNullチェック[EF 7 RC1]

int peopleProjectionCount = _db.People.Count(); 

は、しかし、私はこの射影を実行して、カウントを取得するとき、私が得るのは、TitleTypeとSuffixTypeがnullでないレコードのみのカウントです。

int peopleProjectionCount = _db.People 
      .Select(p => 
       new PersonViewModel() 
       { 
        AgeInMonths = p.AgeInMonths, 
        Title = p.TitleType == null ? null : p.TitleType.Title, 
        FirstName = p.FirstName, 
        NickName = p.NickName, 
        MiddleName = p.MiddleName, 
        LastName = p.LastName, 
        Suffix = p.SuffixType == null ? null : p.SuffixType.Suffix, 
        DateOfBirth = p.DateOfBirth, 
        DateOfDeath = p.DateOfDeath 
       }).Count(); 

このプロジェクションでは、この質問の目的でここにCountが返されます。私が本当にやりたいことは、PersonViewModelのリストを返すことです。人がタイトルやサフィックスを持っていない場合でも、そのレコードを含めることができます。私は、ビューモデルのそのプロパティをnullにするだけです。ここでは、それらのレコードが単純に無視されるように見えます。

これは正常な動作ですか?もしそうなら、どうすれば、チェックされたプロパティがnullのレコードを無視して、EFなしでこのような投影でヌルチェックを使うことができますか?

+0

'null'チェックをすべて削除するとどうなりますか?Title = p.TitleType.Title'? – juharr

+2

このコード行をデータコンテキストコンストラクタに追加し、出力ウィンドウで実行されたクエリを確認します - this.Database.Log = s => System.Diagnostics.Debug.WriteLine(s); – Stilgar

+0

@juharrもし 'Title = p.TitleType.Title'とSuffixと同じことをしても、私は同じ結果を得ます。あたかもEFが私のためにヌルチェックをして、チェックに失敗したレコードを無視するかのようです。私の考えは、NullReferenceExceptionで失敗するだろう。 – paz

答えて

1

Ivanが述べたように、これは現在RC2で修正予定のEF 7のバグです。

私はプロファイラを接続することができ、報告された同じ問題と、スティルガーが疑うものを見た:内部結合。

SELECT [p].[AgeInMonths], CASE 
WHEN [p].[TitleTypeId] IS NULL 
THEN NULL ELSE [p.TitleType].[Title] 
END, [p].[FirstName], [p].[NickName], [p].[MiddleName], [p].[LastName], CASE 
WHEN [p].[SuffixTypeId] IS NULL 
THEN NULL ELSE [p.SuffixType].[Suffix] 
END, [p].[DateOfBirth], [p].[DateOfDeath] 
FROM [dbo].[People] AS [p] 
INNER JOIN [dbo].[SuffixTypes] AS [p.SuffixType] ON [p].[SuffixTypeId] = [p.SuffixType].[Id] 
INNER JOIN [dbo].[TitleTypes] AS [p.TitleType] ON [p].[TitleTypeId] = [p.TitleType].[Id]` 
関連する問題