EF Core - Firebird Migration自增问题
EF Core - Firebird Migration auto-increment problem
我正在测试 EF Core 与 MSSQL-Server 和 Firebird 3.0 的迁移。
我创建了一个包含几个字段的新 table。关键字段具有 属性 .ValueGeneratedOnAdd()
,但 Firebird 数据库中的关键字段在迁移期间不会自动递增。它与 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");
});
我在 http://tracker.firebirdsql.org/browse/DNET-884 上找到了解决方案。我必须在 DBContext class 的 OnModelCreating 中添加 .ForFirebirdUseIdentityColumns()
。现在我在 database-types.
中得到了 auto-increment
现在看起来像这样:
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-parameter 中为我正在使用的第二个 database-type 添加注释。在我的例子中,我使用 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);
});
我正在测试 EF Core 与 MSSQL-Server 和 Firebird 3.0 的迁移。
我创建了一个包含几个字段的新 table。关键字段具有 属性 .ValueGeneratedOnAdd()
,但 Firebird 数据库中的关键字段在迁移期间不会自动递增。它与 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");
});
我在 http://tracker.firebirdsql.org/browse/DNET-884 上找到了解决方案。我必须在 DBContext class 的 OnModelCreating 中添加 .ForFirebirdUseIdentityColumns()
。现在我在 database-types.
现在看起来像这样:
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-parameter 中为我正在使用的第二个 database-type 添加注释。在我的例子中,我使用 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);
});