1
resposta

Erro na solução proposta

Havia desenvolvido uma solução bem próxima da proposta. Entretanto tive a exceção System.Data.SqlTypes.SqlNullValueException: 'Data is Null. This method or property cannot be called on Null values.' na condição if (listaAnoLancamento.Any()). Copiei o código da resolução substituindo apenas o nome da classe e o erro persiste. Possuo músicas cadastradas com o ano que estou colocando (2010).

Edit: alterei a minha tabela para que todas as instâncias de música no banco de dados possuam um ArtistaId e funcionou. A minha migration que relaciona o artista com a música está da seguinte forma:

using Microsoft.EntityFrameworkCore.Migrations;

#nullable disable

namespace ScreenSound.Migrations
{
    /// <inheritdoc />
    public partial class RelacionarArtistaMusica : Migration
    {
        /// <inheritdoc />
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.AddColumn<int>(
                name: "ArtistaId",
                table: "Musicas",
                type: "int",
                nullable: true);

            migrationBuilder.CreateIndex(
                name: "IX_Musicas_ArtistaId",
                table: "Musicas",
                column: "ArtistaId");

            migrationBuilder.AddForeignKey(
                name: "FK_Musicas_Artistas_ArtistaId",
                table: "Musicas",
                column: "ArtistaId",
                principalTable: "Artistas",
                principalColumn: "Id",
                onDelete: ReferentialAction.Cascade);
        }

        /// <inheritdoc />
        protected override void Down(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.DropForeignKey(
                name: "FK_Musicas_Artistas_ArtistaId",
                table: "Musicas");

            migrationBuilder.DropIndex(
                name: "IX_Musicas_ArtistaId",
                table: "Musicas");

            migrationBuilder.DropColumn(
                name: "ArtistaId",
                table: "Musicas");
        }
    }
}

Gostaria de saber qual foi a razão do erro, uma vez que a condição leva em conta apenas AnoLancamento, e não a coluna ArtistaId. Obrigado!

1 resposta

Oii, Paulo. Tudo bem?

Embora você esteja certo em dizer que a condição if (listaAnoLancamento.Any()) não está diretamente relacionada ao ArtistaId, o Entity tentou carregar a entidade relacionada Artista quando você acessava a lista de músicas.

Isso é um comportamento conhecido como carregamento preguiçoso (Lazy Loading). Acredita que é uma característica do Entity Framework? E o nome é esse mesmo. 😋

Quando você alterou sua tabela para que todas as músicas tivessem um ArtistaId, você garantiu que não haveria valores nulos quando o Entity Framework Core tentasse carregar a entidade Artista, e é por isso que o erro desapareceu.

Se outra dúvida surgir, estamos aqui.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.