【发布时间】:2020-02-20 19:25:26
【问题描述】:
该项目使用 .Net Core 2.2、EF Core 和 SQL Server 运行。现在,我需要在 Oracle 11g 中使用同样的 projetc。我使用 Oracle.ManagedDataAccess.Core 创建了一个新的迁移项目。生成的迁移文件如下:
migrationBuilder.CreateTable(
name: "AREAATUACAO",
schema: "SISDETEC",
columns: table => new
{
ID = table.Column<long>(nullable: false)
.Annotation("Oracle:ValueGenerationStrategy", OracleValueGenerationStrategy.IdentityColumn),
DATACADASTRO = table.Column<DateTime>(nullable: false),
DATAATUALIZACAO = table.Column<DateTime>(nullable: false),
NOME = table.Column<string>(nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_AREAATUACAO", x => x.ID);
});
而生成的脚本是:
BEGIN
EXECUTE IMMEDIATE 'CREATE TABLE
"SISDETEC"."AREAATUACAO" (
"ID" NUMBER(19) GENERATED BY DEFAULT ON NULL AS IDENTITY NOT NULL,
"DATACADASTRO" TIMESTAMP(7) NOT NULL,
"DATAATUALIZACAO" TIMESTAMP(7) NOT NULL,
"NOME" NVARCHAR2(2000),
CONSTRAINT "PK_AREAATUACAO" PRIMARY KEY ("ID")
)';
END;
但是,在Oracle 11g 中不存在IDENTITY 命令。必须使用触发器和序列生成 PK。
如何配置 de EF Core 以生成适用于 Oracle 版本 11g 的命令?
【问题讨论】:
-
[已解决] 使用 UseOracleSQLCompatibility() 扩展。文档链接:docs.oracle.com/en/database/oracle/…
-
请不要在标题中添加“SOLVED”和类似的语言。请参阅meta.stackexchange.com/questions/116101/…,而是在下面回答您的问题。
标签: c# oracle ef-core-2.2