1

我正在使用带有 MSSQL-Server 和 Firebird 3.0 的 EF Core 测试迁移。

我创建了一个包含几个字段的新表。key-field 具有 property .ValueGeneratedOnAdd(),但 Firebird 数据库中的 key-field 在迁移过程中不会自动递增。它可以正确地与 MS-SQL-Server 一起使用。

我使用框架 FirebirdSql.EntityFrameworkCore.Firebird 版本 6.6.0。

modelBuilder.Entity("GenerateCodeFromDB.DB_Modell.TblTest", b =>
{
    b.Property<long>("Id")
        .ValueGeneratedOnAdd()
        .HasColumnName("ID")
        .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

    b.Property<DateTime?>("Date");

    b.Property<string>("Name")
        .HasMaxLength(50);

    b.Property<int?>("Number");

    b.HasKey("Id");

    b.ToTable("tblTest");
});
4

1 回答 1

2

我在http://tracker.firebirdsql.org/browse/DNET-884上得到了解决方案。我必须.ForFirebirdUseIdentityColumns()在 DBContext 类中添加 OnModelCreating。现在我得到了两种数据库类型的自动增量。

现在看起来像这样:

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.HasAnnotation("ProductVersion", "2.2.4-servicing-10062")
            .ForFirebirdUseIdentityColumns()
            .ForSqlServerUseIdentityColumns();

        modelBuilder.Entity<TblTest>(entity =>
        {
            entity.HasKey(e => e.Id)
                .HasName("PK__tblTest");

            entity.Property(e => e.Name).IsUnicode(false);
        });
    }

添加迁移后,我必须在 createTable 参数中为我正在使用的第二种数据库类型添加注释。就我而言,我使用 Firebird 添加了迁移,并为 SqlServer 添加了注释:

        migrationBuilder.CreateTable(
            name: "tblTest",
            columns: table => new
            {
                ID = table.Column<long>(nullable: false)
                    .Annotation("Fb:ValueGenerationStrategy", FbValueGenerationStrategy.IdentityColumn)       
                    .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
                Number = table.Column<int>(nullable: true),
                Name = table.Column<string>(unicode: false, maxLength: 50, nullable: true),
                Date = table.Column<DateTime>(nullable: true)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK__tblTest", x => x.ID);
            });
于 2019-07-05T11:15:00.247 回答