更新:我已經解決了這個問題。我的解決方案在我的遷移中丟失了,並且將針對您的數據庫管理器。實體框架核心將空值分配給非空主鍵
解決方法是該線路的遷移:
Id = table.Column<long>(nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.SerialColumn)
我有我試圖讓EF處理ID生成的表。 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,Id的默認值爲0.當將該值插入dataContext.MyEntities.Add(newEntity)
和i發現它現在具有非常大的負值的實體(似乎是負的long.MaxValue)。問題是在EF的dataContext.SaveChanges();
期間似乎將這個負值轉換爲空值並拋出。
模式:
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