3
respostas

[Dúvida] DateTime

Todas as vezes que eu vou subir uma migration nova, de qualquer entidade, conforme o acompanhamento do curso anterior, estou tendo um problema com o DateTime... Em todas as migrations o código gerado tá levando em consideração o DateTime também, mas eu não tenho mexido nele... Por exemplo, fui criar uma migração vazia, e a migração veio assim:

public partial class Filme_RetricaoCheck : Migration
{
    protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.AlterColumn<DateTime>(
            name: "last_update",
            table: "language",
            type: "datetime",
            nullable: false,
            defaultValueSql: "getdate()",
            oldClrType: typeof(DateTime),
            oldType: "datetime",
            oldNullable: true,
            oldDefaultValueSql: "getdate()");

        migrationBuilder.AlterColumn<DateTime>(
            name: "last_update",
            table: "film_category",
            type: "datetime",
            nullable: false,
            defaultValueSql: "getdate()",
            oldClrType: typeof(DateTime),
            oldType: "datetime",
            oldNullable: true,
            oldDefaultValueSql: "getdate()");

        migrationBuilder.AlterColumn<DateTime>(
            name: "last_update",
            table: "film_actor",
            type: "datetime",
            nullable: false,
            defaultValueSql: "getdate()",
            oldClrType: typeof(DateTime),
            oldType: "datetime",
            oldNullable: true,
            oldDefaultValueSql: "getdate()");

        migrationBuilder.AlterColumn<DateTime>(
            name: "last_update",
            table: "film",
            type: "datetime",
            nullable: false,
            defaultValueSql: "getdate()",
            oldClrType: typeof(DateTime),
            oldType: "datetime",
            oldNullable: true,
            oldDefaultValueSql: "getdate()");

        migrationBuilder.AlterColumn<DateTime>(
            name: "last_update",
            table: "category",
            type: "datetime",
            nullable: false,
            defaultValueSql: "getdate()",
            oldClrType: typeof(DateTime),
            oldType: "datetime",
            oldNullable: true,
            oldDefaultValueSql: "getdate()");

        migrationBuilder.AlterColumn<DateTime>(
            name: "last_update",
            table: "actor",
            type: "datetime",
            nullable: false,
            defaultValueSql: "getdate()",
            oldClrType: typeof(DateTime),
            oldType: "datetime",
            oldNullable: true,
            oldDefaultValueSql: "getdate()");
    }
 }
   
3 respostas

// outra parte

 protected override void Down(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.AlterColumn<DateTime>(
            name: "last_update",
            table: "language",
            type: "datetime",
            nullable: true,
            defaultValueSql: "getdate()",
            oldClrType: typeof(DateTime),
            oldType: "datetime",
            oldDefaultValueSql: "getdate()");

        migrationBuilder.AlterColumn<DateTime>(
            name: "last_update",
            table: "film_category",
            type: "datetime",
            nullable: true,
            defaultValueSql: "getdate()",
            oldClrType: typeof(DateTime),
            oldType: "datetime",
            oldDefaultValueSql: "getdate()");

        migrationBuilder.AlterColumn<DateTime>(
            name: "last_update",
            table: "film_actor",
            type: "datetime",
            nullable: true,
            defaultValueSql: "getdate()",
            oldClrType: typeof(DateTime),
            oldType: "datetime",
            oldDefaultValueSql: "getdate()");

        migrationBuilder.AlterColumn<DateTime>(
            name: "last_update",
            table: "film",
            type: "datetime",
            nullable: true,
            defaultValueSql: "getdate()",
            oldClrType: typeof(DateTime),
            oldType: "datetime",
            oldDefaultValueSql: "getdate()");

        migrationBuilder.AlterColumn<DateTime>(
            name: "last_update",
            table: "category",
            type: "datetime",
            nullable: true,
            defaultValueSql: "getdate()",
            oldClrType: typeof(DateTime),
            oldType: "datetime",
            oldDefaultValueSql: "getdate()");

        migrationBuilder.AlterColumn<DateTime>(
            name: "last_update",
            table: "actor",
            type: "datetime",
            nullable: true,
            defaultValueSql: "getdate()",
            oldClrType: typeof(DateTime),
            oldType: "datetime",
            oldDefaultValueSql: "getdate()");
    }
}

em todas as configurações o DateTime está assim:

        builder
            .Property<DateTime>("last_update")
            .HasColumnType("datetime")
            .HasDefaultValueSql("getdate()");

Olá, Camila! Parece que você está tendo um problema com o DateTime sendo incluído em todas as suas migrações, mesmo quando você não fez alterações nele, certo?

Isso pode ocorrer quando o Entity Framework detecta uma diferença entre o modelo de dados e o esquema do banco de dados. No seu caso, parece que o Entity Framework está interpretando que há uma mudança na coluna "last_update" do tipo DateTime em várias tabelas, e por isso está tentando atualizar essa coluna em cada migração.

Uma possibilidade é que o valor padrão para essa coluna no banco de dados seja diferente do valor padrão no modelo de dados. No seu código de migração, vejo que o valor padrão para "last_update" é definido como "getdate()", o que significa que a data e hora atuais serão usadas como valor padrão.

Se o valor padrão no modelo de dados for diferente disso, o Entity Framework pode estar interpretando isso como uma mudança que precisa ser migrada. Você pode verificar o valor padrão para "last_update" no modelo de dados e, se necessário, alterá-lo para corresponder ao valor padrão no banco de dados.

Outra possibilidade é que o Entity Framework esteja interpretando incorretamente a configuração de "nullable" para a coluna "last_update". No seu código de migração, vejo que "last_update" está sendo alterado de nullable para não nullable. Se "last_update" já for não nullable no modelo de dados, isso pode estar causando o problema.

Para resolver isso, você pode tentar fazer "last_update" nullable no modelo de dados, ou se certificar de que "last_update" já é não nullable no banco de dados antes de executar a migração.

Espero que essas sugestões possam te ajudar a resolver o problema. Lembre-se, essas são apenas suposições baseadas no código de migração que você compartilhou, e a causa real do problema pode ser diferente. Espero ter ajudado e bons estudos!