【发布时间】:2017-02-13 22:14:36
【问题描述】:
更新:我已经解决了这个问题。在我的情况下,我的迁移中缺少解决方案,并且将特定于您的数据库管理器。
修复是迁移中的这一行:
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) 并检查该实体时,它现在有一个非常大的负值(似乎是负长。最大值)。问题是在dataContext.SaveChanges(); EF 期间的某个时候似乎将此负值转换为 null 并抛出。
架构:
CREATE TABLE "MyEntity" (
"Id" bigint NOT NULL,
"Created" timestamp without time zone NOT NULL,
);
【问题讨论】:
-
你能把生成的表格设计/模式贴出来
-
每个数据库提供者的实现都不同。这是哪一个?
-
这适用于 postgres,使用 "Npgsql.EntityFrameworkCore.PostgreSQL": "1.1.0", "Npgsql.EntityFrameworkCore.PostgreSQL.Design": "1.1.0"
-
是的......你必须找出他们是如何实现它的。
标签: c# entity-framework .net-core entity-framework-core