【问题标题】:EF Core with Oracle 11g. Problem with IDENTITY PKEF Core 与 Oracle 11g。 IDENTITY PK 的问题
【发布时间】: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 的命令?

【问题讨论】:

标签: c# oracle ef-core-2.2


【解决方案1】:

来自https://docs.oracle.com/en/database/oracle/oracle-data-access-components/19.3/odpnt/EFCoreAPI.html#GUID-770CD8EA-F963-48A5-A679-CAF471A4DB1A

使用 Oracle 数据库版本 11.2 的客户应设置UseOracleSQLCompatibility("11")

optionsBuilder.UseOracle("User Id=hr;Password=<password>;Data Source = inst1", b =>
  b.UseOracleSQLCompatibility("11"));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多