2016-06-24 7 views
0

Ich versuche, ein Kind einer Entity Framework-Entity-Instanz in eine einfache Klasse zu konvertieren, stoße aber auf einige Schwierigkeiten. Hier ist mein entsprechender Code:Wie konvertiert man eine einzelne enthaltene untergeordnete Entität (eins-zu-eins) in ein einfaches Objekt in Entity Framework?

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(); 

Diese auf der Linie versagt, die SurveySearchResult mit einem ArgumentException Fehler setzt. Ich glaube, das ist, weil Blog.Survey technisch Nullable ist? Wenn ich b.Survey.Id in ein non-nullable int umwandeln, erhalte ich einen Fehler, der besagt: AggregateException: One or more errors occurred. (Unable to cast object of type 'System.String' to type 'Models.Blog'.).

Seit Survey hat eine Eins-zu-Eins-Beziehung mit Blog Ich kann es nicht in ein einfaches Objekt mit Lambda-Ausdrücke konvertieren, wie Sie mit einer Liste Kind unter Umständen. Ich habe so etwas wie dies versucht:

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

ohne Glück und haben mit einer Hilfsfunktion versucht, das Objekt manuell konvertieren über in-line. Nichts scheint zu funktionieren. Gibt es einen Standardweg, von dem ich nichts weiß?

Antwort

0

Es ist nichts offensichtlich falsch mit Ihrem geposteten Code. ArgumentException wird im Allgemeinen ausgelöst, wenn etwas an einem an eine Methode oder einen Konstruktor übergebenen Argument "ungültig" ist. In der Regel erhalten Sie etwas wie ArgumentNullException oder ArgumentOutOfRangeException, die von ArgumentException abgeleitet sind und explizite Details darüber geben, was mit dem Argument eigentlich falsch ist.

Allerdings gibt es hier nichts, was diese besondere Ausnahme wirklich verursachen sollte. Die einzigen Argumente, die Sie übergeben, sind Include und Select, und diese sind völlig in Ordnung. Es ist möglich, dass etwas auf BlogSearchResult oder SurveySearchResult ist, das diesen Fehler erzeugt, aber Sie haben den Code für diese Klassen nicht veröffentlicht, was es unmöglich macht, es zu sagen.