2017-02-13 65 views
0

更新:我已經解決了這個問題。我的解決方案在我的遷移中丟失了,並且將針對您的數據庫管理器。實體框架核心將空值分配給非空主鍵

解決方法是該線路的遷移:

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, 
); 
+0

您可以發佈生成的表設計/架構 – DaniDev

+0

實現每個數據庫供應商不同。這是哪一個? –

+0

這是針對postgres,使用「Npgsql.EntityFrameworkCore.PostgreSQL」:「1.1.0」, 「Npgsql.EntityFrameworkCore.PostgreSQL.Design」:「1.1.0」 – user2793442

回答