如何解决如何修复“每个表只能将一列配置为‘身份’在 Ef Core 和 Oracle 中调用‘ValueGeneratedNever’...
我有一个 Oracle 数据库。我尝试使用已成功完成的 EF Core 将我的数据模型搭建到我的 .net core 5 项目中,但是当我尝试从中获取列表时出现此错误:
每个表只能将一列配置为“身份”。为不应使用“身份”的属性调用“ValueGeneratedNever”。
数据库中的表只有一个标识列“ID”,另一列是一个没有精度的简单数字。 这是我逆向工程后的模型:
modelBuilder.Entity<CreBranches>(entity =>
{
entity.ToTable("CRE_BRANCHES");
entity.Property(e => e.Id).HasColumnName("ID");
entity.Property(e => e.BranchCode)
.HasColumnName("BRANCH_CODE")
.HasColumnType("NUMBER")
.ValueGeneratedOnAdd();
entity.Property(e => e.CreationDate)
.HasColumnName("CREATION_DATE")
.HasColumnType("TIMESTAMP(6)")
.ValueGeneratedOnAdd();}
当我只是从每个模型中进行简单的选择时,出现此错误:
属性'CreBranches.BranchCode'、'CreBranches.Id' 被配置为使用'Identity' 值生成器并映射到同一个表'Cre_branches'。每个表只能将一列配置为“身份”。为不应使用“身份”的属性调用“ValueGeneratedNever”。
CRE_BRANCHES:
当我删除 ValueGeneratedOnAdd() 时,它起作用了。有没有人知道该怎么做?
提前致谢。
解决方法
我终于解决了这个问题。
问题是我没有在 Oracle 中为我的数字列设置默认值。我将这些列的默认值设置为 NULL,使用以下命令解决了问题:
ALTER TABLE table_name MODIFY column_name DEFAULT NULL;
所以,在搭建好数据库后,EF 给 fluent API 添加了 .HasDefaultValueSql("NULL") :
entity.Property(e => e.ColumnName)
.ValueGeneratedOnAdd()
.HasColumnName("Column_Name")
.HasDefaultValueSql("NULL");
谢谢大家。
,按照惯例,EF 假定列 ID 是标识列。在数字列上使用 .ValueGeneratedOnAdd() 也会生成标识列。一张表只能有一个标识列。有关列名称约定和 ValueGeneratedOnAdd
方法的更多详细信息,请查看 EF 文档。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。