ich ein paar Klassen,LINQ verzögertes Laden und die Schaffung neues Objekts
public class Album
{
public int AlbumId { get; set; }
public string Title { get; set; }
public Genre genre { get; set; }
public virtual Artist artist { get; set; }
}
public class Artist
{
public int ArtistId { get; set; }
public string Name { get; set; }
public virtual ICollection<Album> albums { get; set; }
}
public class ArtistResponse
{
public int ArtistId { get; set; }
public string Name { get; set; }
}
public class AlbumResponse
{
public int AlbumId { get; set; }
public string Title { get; set; }
public Genre genre { get; set; }
public ArtistResponse artist { get; set; }
}
Ich versuche, alle Alben mit Künstlern zum Download, und senden Sie es mit AlbumResponse. Ich habe einen Ausdruck LINQ
return ctx.Albums.Include(i => i.artist).Select(i => new AlbumResponse
{
AlbumId = i.AlbumId,
artist = new ArtistResponse { Name=i.artist.Name, ArtistId=i.artist.ArtistId},
genre = i.genre,
Title = i.Title
}).ToList();
Also ich bin auch ‚Künstler‘ von „include()“ und dann neuen AlbumResponse schaffen, wo ich neue ArtistResponse erstellen. Leider funktioniert es nicht. Es löst eine InvalidOperationException aus. "i.artist.ArtistId" ist ein Null, ich weiß nicht warum, ohne ArtistId-Initialisierung funktioniert alles gut, nur "Name = i.artist.Name" funktioniert einwandfrei.
Wie hänge ich ArtistId an 'artist' in 'AlbumResponse' an? Ausnahme: "Die Umwandlung in Werttyp 'System.Int32' ist fehlgeschlagen, da der materialisierte Wert null ist. Entweder der generische Parameter des Ergebnistyps oder die Abfrage muss einen Nullwerttyp verwenden." Klassen Album und Interpret sind in Datenbank, AlbumId und ArtistId nicht nullfähig. ArtistResponse und AlbumResponse sind nur „extra“ Klassen für das Hinzufügen oder aus der Datenbank bekommen info, so ArtistId und AlbumId in „* Response“ sind ints nur
Dies funktioniert nicht, es zeigt Fehler auf "HasValue", "int enthält keine Definition für hasValue ...". – Pawel
Versuchen Sie, die ArtistId-Eigenschaft der ArtistResponse-Klasse laut meiner Bearbeitung auf Null zu setzen. – mm8
Es funktioniert jetzt :) aber ich verstehe nicht wirklich warum ... Könnten Sie es bitte erklären? – Pawel