【发布时间】:2020-09-16 05:04:20
【问题描述】:
我已在上下文模型中添加了一个项目并尝试保存更改,但即使使用有效值,我也会收到如下错误。想知道它是如何在拥有所有有效值之后抛出的。
System.Data.Entity.Infrastructure.DbUpdateException:更新条目时出错。有关详细信息,请参阅内部异常。
System.Data.Entity.Core.UpdateException:更新条目时出错。有关详细信息,请参阅内部异常。
Oracle.ManagedDataAccess.Client.OracleException: ORA-01400: 不能 将 NULL 插入 ("DBO"."JOBS"."JOBID")
代码:
_dbContext.Jobs.Add(new Job(){JobId = 1902456,JobExecutionId = 390023,AccountId = 1,CommandType = "Type 1"});
_dbContext.SaveChanges();
internal class JobsConfiguration : EntityTypeConfiguration<Job>
{
public JobsConfiguration()
{
ToTable("JOBS");
HasKey(g => g.JobId);
Property(g => g.JobId).HasColumnName("JOBID");
Property(g => g.JobExecutionId).HasColumnName("JOBEXECUTION_ID");
Property(g => g.AccountId).HasColumnName("ACCTID");
Property(g => g.CommandType).HasColumnName("COMMANDTYPE");
}
}
【问题讨论】:
-
EF 可能希望数据库为 PK 分配一个值。
-
@JeremyLakeman 嗨,当我通过代码中的直接查询插入相同的数据时,我没有遇到任何问题并且插入了数据。谢谢。
-
Entity Framework 正在传递 NULL,因为您告诉它 JobId 字段是主键。它没有使用你给它的价值。 Oracle 也很“特殊”,因为您必须自己告诉它如何自动增加 ID。是的,这很愚蠢,但 Oracle 就是这样。
-
在您的构建器中使用这段代码:Property(e => e.JobId).HasColumnName("JOBID") .ForOracleUseSequenceHiLo("SEQUENCE_NAME");
-
@CaptainKenpachi 存在另一列“ID”,用于自动递增。
标签: c# oracle entity-framework