を作成し、LINQ遅延ロードと私はいくつかのクラスを持っている新しいオブジェクト
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; }
}
私はアーティストですべてのアルバムをダウンロードし、AlbumResponseでそれを返すようにしようとしています。 私は、だから私はよる「アーティスト」「を含めるを()」を含め、その後、私は新しいArtistResponseを作成する新しいAlbumResponseを作成してい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();
を持っています。不幸にもそれはうまくいかない。 InvalidOperationExceptionがスローされます。 "i.artist.ArtistId"はnullですが、ArtistIdの初期化を行わなくても "Name = i.artist.Name"だけが完璧に動作するため、なぜか分かりません。
ArtistIdを 'AlbumResponse'の 'アーティスト'に追加するにはどうすればよいですか? 例外: "マテリアライズされた値がnullであるため、値の型 'System.Int32'へのキャストが失敗しました。結果の型の汎用パラメータまたはクエリでnull可能型を使用する必要があります" クラスAlbumおよびArtistはDatabase、AlbumId、ArtistIdにあります。 nullは使用できません。 ArtistResponseとAlbumResponseは「*レスポンス」にARTISTIDとALBUMIDので、データベースからの情報を追加したり、取得するためだけの「余分な」クラスですartist
ナビゲーションプロパティのArtistId
列がNullable<int>
とのタイプである場合は、単に
これは動作しません。 "HasValue"、 "intにhasValue ...の定義が含まれていません"というエラーが表示されます。 – Pawel
ArtistResponseクラスのArtistIdプロパティを自分の編集ごとにnullにするようにしてください。 – mm8
それは今働いています:)しかし、私は本当に理由を理解していません。あなたはそれを説明できますか? – Pawel