Когда я вставляю новую сущность в dbcontext, EFCore не может заполнить столбец id методом .AddRange () - PullRequest
0 голосов
/ 20 марта 2020

EFCore не может заполнить столбец идентификаторов после вставки. Как обеспечить автоматическое заполнение этого свойства после вставки методом .AddRange ()? Кстати, я использую базу данных MySql.

Мой метод AddRange в репо:

  public void AddRange(IQueryable<TEntity> entities)
    {          
        Entities.AddRange(entities);
        SaveChanges();
    }

Мой класс BaseEntity:

/// <summary>
/// All entities have this values.
/// </summary>
public abstract class BaseEntity
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    public DateTime InsertedDate { get; set; }
    public DateTime? UpdatedDate { get; set; }
    public DateTime? DeletedDate { get; set; }
    public bool Active { get; set; }
}

Миграция одного из мои сущности:

 migrationBuilder.CreateTable(
            name: "HappyHour",
            columns: table => new
            {
                Id = table.Column<int>(nullable: false)
                    .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn),
                InsertedDate = table.Column<DateTime>(nullable: false),
                UpdatedDate = table.Column<DateTime>(nullable: true),
                DeletedDate = table.Column<DateTime>(nullable: true),
                Active = table.Column<bool>(nullable: false),

            },
            constraints: table =>
            {
                table.PrimaryKey("PK_HappyHour", x => x.Id);
            });

Modelsnapshot моей миграции:

 modelBuilder.Entity("Entity.HappyHour", b =>
            {
                b.Property<int>("Id")
                    .ValueGeneratedOnAdd()
                    .HasColumnType("int");

                b.Property<bool>("Active")
                    .HasColumnType("tinyint(1)");

                b.Property<DateTime?>("DeletedDate")
                    .HasColumnType("datetime(6)");                    

                b.Property<DateTime>("InsertedDate")
                    .HasColumnType("datetime(6)");                  

                b.Property<DateTime?>("UpdatedDate")
                    .HasColumnType("datetime(6)");

                b.HasKey("Id");

                b.ToTable("HappyHour");
            });

Версии пакетов Nuget:

Microsoft.EntityFrameworkCore : 3.1.1,
MySql.Data.EntityFrameworkCore : 8.0.19,
Pomelo.EntityFrameworkCore.MySql : 3.1.0

Это мой первый вопрос. Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 18 апреля 2020

Также вы можете редактировать эти строки: Эта строка: InsertedDate = table.Column (nullable: false), быть такой: InsertedDate = table.Column (nullable: false, defaultValue: DateTime.Now),

И эта строка: Active = table.Column (nullable: false) Чтобы быть такой: Active = table.Column (nullable: false, defaultValue: true)

0 голосов
/ 20 марта 2020

Речь идет о типе коллекции IEnumerable или IQueryable. Это должен быть список

...