實體框架核心將空值分配給非空主鍵

.net-core c# entity-framework entity-framework-core

更新:我已解決了這個問題。我的案例中的解決方案在我的遷移中丟失了,並且將特定於您的數據庫管理器。

修復是遷移中的這一行:

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時,Id的默認值為0.當將該值插入dataContext.MyEntities.Add(newEntity)並檢查實體時,它現在具有極大的負值(似乎是負值) long.MaxValue)。問題是在dataContext.SaveChanges();期間的dataContext.SaveChanges(); EF似乎將此負值轉換為null並拋出。

架構:

CREATE TABLE "MyEntity" (
    "Id" bigint NOT NULL,
    "Created" timestamp without time zone NOT NULL,
);

熱門答案

嘗試:

modelBuilder.Entity<MyEntity>().HasKey(e => e.Id).HasName("Id");

或添加Key裝飾器(數據註釋):

[Key]
public virtual long Id { get; set; }

看到:

https://docs.microsoft.com/en-us/ef/core/modeling/relational/columns

https://msdn.microsoft.com/en-us/library/jj591583(v=vs.113).aspx



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow