2017-02-13 5 views
0

Обновление: я исправил проблему. Решение в моем случае отсутствовало в моей миграции и будет специфично для вашего менеджера баз данных.Ядро 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, 
); 
+0

вы можете разместить сгенерированную таблицу дизайна/схемы – DaniDev

+0

Реализации различается в зависимости от поставщика базы данных. Какой из них? –

+0

Это для postgres, используя «Npgsql.EntityFrameworkCore.PostgreSQL»: «1.1.0», «Npgsql.EntityFrameworkCore.PostgreSQL.Design»: «1.1.0» – user2793442

ответ

0

Try:

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

или добавление ключа декоратор (Data аннотаций):

[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

+0

Я обновил мой снимок модели в сообщении, чтобы отразить это, он устанавливал свойство ключа как идентификатор, но все еще установил его равным нулю. – user2793442

Смежные вопросы