【问题标题】:When i insert a new entity in dbcontext EFCore can't populate id column with .AddRange() method当我在 dbcontext 中插入新实体时,EFCore 无法使用 .AddRange() 方法填充 id 列
【发布时间】:2020-03-20 03:32:01
【问题描述】:

EFCore 无法在插入后填充标识列。如何在插入后使用 .AddRange() 方法自动填充此属性?顺便说一句,我使用的是 MySql 数据库。

我在 repo 中的 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);
            });

我的迁移模型快照:

 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

这是我的第一个问题。感谢您的帮助。

【问题讨论】:

    标签: .net asp.net-core .net-core entity-framework-core


    【解决方案1】:

    这与 IEnumerable 或 IQueryable 集合类型有关。它应该是列表

    【讨论】:

      【解决方案2】:

      您还可以编辑这些行: 这一行: InsertedDate = table.Column(nullable: false), 要这样: InsertedDate = table.Column(nullable: false, defaultValue:DateTime.Now),

      还有这一行: 活动 = table.Column(可为空:假) 要这样: Active = table.Column(nullable: false, defaultValue:true)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-15
        • 2021-10-31
        • 1970-01-01
        • 2020-11-14
        • 2016-07-05
        • 2019-03-01
        • 2017-07-17
        • 2015-05-11
        相关资源
        最近更新 更多