4
respostas

C# Entity Framework inteiro nulo

Estou fazendo um programa em C# com EFCore, tenho uma propriedade do tipo inteiro que pode receber o valor nulo, pelo que aprendi era preciso apenas escrever o tipo da variável como int? e esta variável poderia receber nulo, lembro que o entity conseguia identificar isso. Tentei pesquisar sobre mas não achei uma solução

//Declaração da variável

public int? Tombamento { get; set; }

//Fluent API EFCore

builder. Property(l => l .Tombamento) .HasColumnName("tombamento") .HasColumnType("integer(7)");

Porém na hora da migração o nullable é false quando deveria ser true

4 respostas

Oi Caio, tudo bem?

Ainda está com problema? Isso deveria sim ser o suficiente.

Uma coisa que já aconteceu comigo é gerar a migração antes de salvar a entidade e eu ficar quebrando a cabeça que ele gerou errado. Será que isso aconteceu com você?

Oi Grabriel, tudo ótimo, salvei sim, esta é a pior parte kkkk Já procurei no stackoverflow e na documentação da microsoft e não consegui achar nada. Teria como eu lhe enviar o programa?

Entendi, Caio.

Uma coisa que você pode fazer pra esse caso em específico é: gerar a migração e alterá-la manualmente para fazer com que o campo seja gerado como nullable em salvar. Sabe como fazer isso?

Cole o código da migration aqui que eu te ajudo se for o caso.

Sei sim, no campo que diz nullable = false na migração gerada mudamos para true, mas queria fazer com que o EF entendesse isso para não ter q a cada nova migração mudar manualmente principalmente porque sou mt esquecido. Mas vou postar o código, posso estar errando em algo mesmo

//=====Código Classe livro=====//

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;

namespace BibliotecaPGM.Negocio { public class Livros { public string Nome { get; set; } public string Autor { get; set; } public string Titulo { get; set; } public string Editor { get; set; } public int Ano { get; set; } public string Classificacao { get; set; } public int? Tombamento { get; set; } public bool Alugado { get; set; } public int Registro { get; set; } public string Edicao { get; set; } public DateTime DataDoAluguel { get; set; } public DateTime DataDaDevolucao { get; set; } public virtual Usuario usuario { get; set; }

}

} //=====Código Contexto======//

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.SqlServer; using BibliotecaPGM.Configuration; using BibliotecaPGM.Negocio;

namespace BibliotecaPGM.Contexto { public class BibliotecaPGMContext : DbContext { public DbSet livros { get; set; } public DbSet usuarios { get; set; } public DbSet contatos { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder dbob)
    {
        //dbob.UseSqlServer("Server = (localdb)\\MSSQLLocalDB;DataSbase=Biblioteca;Trusted_Connection=true");
        dbob.UseSqlServer("Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=Biblioteca;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False");

    }

    protected override void OnModelCreating(ModelBuilder builder)
    {

        builder.ApplyConfiguration(new LivrosConfiguration());
        builder.ApplyConfiguration(new UsuarioConfiguration());
        builder.ApplyConfiguration(new ContatoConfiguration());

    }
}

}

//===Trecho da migração que volta nullable = false===//

migrationBuilder.CreateTable( name: "Livros", columns: table => new { livros_id = table.Column(nullable: false) .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn), nome_do_livro = table.Column(type: "varchar(80)", nullable: false), autor = table.Column(type: "varchar(255)", nullable: false), titulo = table.Column(type: "varchar(100)", nullable: false), editor = table.Column(type: "varchar(20)", nullable: false), ano = table.Column(type: "integer(6)", nullable: false), classificacao = table.Column(type: "varchar(20)", nullable: false), tombamento = table.Column(type: "integer(5)", nullable: false), Alugado = table.Column(nullable: false, defaultValue: false), registro = table.Column(type: "integer(8)", nullable: false), edicao = table.Column(type: "varchar(10)", nullable: false), data_do_aluguel = table.Column(type: "datetime", nullable: false), data_da_devolucao = table.Column(type: "datetime", nullable: false), usuario_id = table.Column(nullable: true)