【发布时间】:2020-03-27 05:43:17
【问题描述】:
我有一个使用 Oracle 数据库的 net core web app net core 3.1。这些表是使用 MS.EntityFrameworkCore.Tools('add-migration' & 'update-database' 命令)生成的。 特别是自动生成的表,AspNetUserClaims 和 AspNetRoleClaims 都使用 Oracle 的自动身份生成。
我遇到的问题是给定代码,由于约束冲突,我无法添加新的用户声明。
OracleException: ORA-00001: 违反了唯一约束 (SYSTEM.PK_AspNetUserClaims)。
表的 SQL:
CREATE TABLE "SYSTEM"."AspNetUserClaims"
(
"Id" NUMBER(10,0) GENERATED BY DEFAULT AS IDENTITY MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER NOCYCLE NOKEEP NOSCALE NOT NULL ENABLE,
"UserId" NVARCHAR2(450) NOT NULL ENABLE,
"ClaimType" NVARCHAR2(2000),
"ClaimValue" VARCHAR2(3000 CHAR),
CONSTRAINT "PK_AspNetUserClaims" PRIMARY KEY ("Id")
......
)
C#代码:
IdentityUserClaim<string> userClaim = new IdentityUserClaim<string> { UserId = user.Id, ClaimType = "WT", ClaimValue = JsonConvert.SerializeObject(jsonWebToken) };
//// var last = await _context.UserClaims.LastOrDefaultAsync(); // dumb workaround
//// userClaim.Id = last == null ? 1 : last.Id + 1;
await _context.UserClaims.AddAsync(userClaim);
始终生成,尝试插入值会导致错误,但 id 是默认值为 0 的整数。
GENERATED DEFAULT,不提供值时生成,同上,默认为整数0。
GENERATED BY DEFAULT ON NULL,整数不可为空。
我如何从这里开始创建用户声明?
请忽略混合大小写、系统架构、引号等。
【问题讨论】:
-
不是这个问题的原因,但我一直发现在 orracle 中使用 " 围绕 MiXeDcAsE 列名会导致其他地方最令人头疼的问题。每次都使用不区分大小写的列名
-
尝试回到Core2.0。每个人都在 Core 3.0 和 3.1 中遇到 Entity 问题。
-
@CaiusJard 和 Littlefoot,要点(尽管 SQL 代码只是从 SQL Developer 表的 SQL 选项卡中复制出来的)。 @jdweng,你一定是在开玩笑。既然 MS.EFC.Tools 是 2.2.6 ,它不应该有点核心 2.0 吗?
-
我不知道“每个人”是否是一个公平的评论——我们的 ef 3.x 项目没有任何重大问题。不过,我们不使用 aspnet 会员资格。
标签: c# oracle constraints add