Обновление: я исправил проблему. Решение в моем случае отсутствовало в моей миграции и будет специфично для вашего менеджера баз данных.Ядро Entity Framework, назначающее нулевое значение для ненулевого первичного ключа
Исправление этой линии в миграции:
Id = table.Column<long>(nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.SerialColumn)
У меня есть таблица, в которой я пытаюсь позволить EF обрабатывать поколение ID. Идентификатор длинный.
модель выглядит следующим образом:
public virtual long Id { get; set; }
public virtual DateTime Created { get; set; }
миграция выглядит следующим образом:
migrationBuilder
.CreateTable("MyEntity",
table => new
{
Id = table.Column<long>(nullable: false),
Created = table.Column<DateTime>(nullable: false)
}
Модель снимок выглядит следующим образом:
modelBuilder.Entity("MyEntity", b =>
{
b.Property<long>("Id")
.ValueGeneratedOnAdd();
b.Property<DateTime>("Created");
b.HasKey("Id");
}
При создании нового юридического лица и не устанавливая Id, идентификатор имеет значение по умолчанию 0. При вставке этого значения в dataContext.MyEntities.Add(newEntity)
и i nspecting сущность, котор он теперь имеет очень большое отрицательное значение (кажется отрицательным long.MaxValue). Проблема в том, что когда-то во время dataContext.SaveChanges();
EF, похоже, преобразует это отрицательное значение в нуль и бросает.
Схема:
CREATE TABLE "MyEntity" (
"Id" bigint NOT NULL,
"Created" timestamp without time zone NOT NULL,
);
вы можете разместить сгенерированную таблицу дизайна/схемы – DaniDev
Реализации различается в зависимости от поставщика базы данных. Какой из них? –
Это для postgres, используя «Npgsql.EntityFrameworkCore.PostgreSQL»: «1.1.0», «Npgsql.EntityFrameworkCore.PostgreSQL.Design»: «1.1.0» – user2793442