2016-06-24 4 views
0

私はEntity Frameworkエンティティインスタンスの子を単純なクラスに変換しようとしていますが、いくつかの問題があります。ここに私の関連するコードは次のとおりです。エンティティフレームワークで単一のインクルード子エンティティ(1対1)を単純オブジェクトに変換するにはどうすればよいですか?

model.BlogSearchResults = await _context.Blog 
           .Include(b => b.Survey) 
           .Select(b => new BlogSearchResult 
           { 
            Id = b.Id, 
            Title = b.Title, 
            Summary = b.Summary, 
            SurveySearchResult = b.Survey == null ? null : new SurveySearchResult 
            { 
             Id = b.Survey.Id, 
             Title = b.Survey.Title, 
             Description = b.Survey.Description 
            } 
           }).ToListAsync(); 

これはArgumentExceptionエラーでSurveySearchResultを設定する行に失敗しています。これは、Blog.Surveyが技術的にnullableであるためだと私は信じていますか?私がb.Survey.Idをnullでないintにキャストすると、私は最終的に状態が:AggregateException: One or more errors occurred. (Unable to cast object of type 'System.String' to type 'Models.Blog'.)となってしまいます。

Blogとの関係が1対1であるため、リストの子と同様にラムダ式を使用して単純なオブジェクトに変換することはできません。運と

SurveySearchResult = (b.Survey => new SurveySearchResult{ ...

し、手動でインラインオブジェクトの上に変換するために、ヘルパー関数を使用して試してみました:私はこのような何かを試してみました。何も動作していないようです。私が気付いていないこれを行うための標準的な方法はありますか?

答えて

0

投稿されたコードに間違いはありません。 ArgumentExceptionは、メソッドやコンストラクタに渡される引数について何か「無効」があるときに一般にスローされます。通常、ArgumentNullExceptionまたはArgumentOutOfRangeExceptionのようなものが得られます。これはArgumentExceptionから派生し、引数に実際に何が間違っているかをより詳細に示します。

しかし、ここでは、実際にはこの例外が発生するはずはありません。あなたが渡している唯一の引数はIncludeSelectです。これらは完全に問題ありません。 BlogSearchResultまたはSurveySearchResultにこのエラーが発生している可能性がありますが、そのクラスのコードを投稿していないため、表示できません。

関連する問題