如何修复“每个 table 只有一列可以配置为 'Identity'。在 Ef Core 和 Oracle 中调用 'ValueGeneratedNever' ...

How to fix "Only one column per table can be configured as 'Identity'. Call 'ValueGeneratedNever' ... in Ef Core and Oracle

我有一个 Oracle 数据库。我尝试使用已成功完成的 EF Core 将我的数据模型搭建到我的 .net core 5 项目中,但是当我尝试从中获取列表时,出现此错误:

Only one column per table can be configured as 'Identity'. Call 'ValueGeneratedNever' for properties that should not use 'Identity'.

数据库中的table只有一个标识列“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();}

当我只是从每个模型制作一个简单的 select 时,我得到这个错误:

The properties 'CreBranches.BranchCode', 'CreBranches.Id' are configured to use 'Identity' value generator and are mapped to the same table 'Cre_branches'. Only one column per table can be configured as 'Identity'. Call 'ValueGeneratedNever' for properties that should not use 'Identity'.

CRE_BRANCHES:

当我删除 ValueGeneratedOnAdd() 时,它起作用了。有人知道该怎么办吗?

按照惯例,EF 假定列 ID 是标识列。在数字列上使用 .ValueGeneratedOnAdd() 也会生成标识列。一个 table 只能有一个标识列。请查看 EF 文档了解列名称约定,并查看 ValueGeneratedOnAdd 方法了解更多详细信息。

我终于解决了问题

问题是我没有在 Oracle 中为数字列设置默认值。我将这些列的默认值设置为 NULL,并使用以下命令解决了问题:

ALTER TABLE table_name MODIFY column_name DEFAULT NULL;

因此,在构建数据库之后,EF 将 .HasDefaultValueSql("NULL") 添加到流利的 API:

entity.Property(e => e.ColumnName)
                .ValueGeneratedOnAdd()
                .HasColumnName("Column_Name")
                .HasDefaultValueSql("NULL");

谢谢大家