簡體   English   中英

如何修復“每個表只能配置一列'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 將我的數據 model 搭建到我的 .net 核心 5 項目中,但是當我嘗試從中獲取列表時,我收到此錯誤:

每個表只能配置一列作為“身份”。 為不應使用“Identity”的屬性調用“ValueGeneratedNever”。

數據庫中的表只有一個標識列“ID”,另一列是一個沒有精度的簡單數字。 這是我的 model 逆向工程后:

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();}

當我從每個 model 制作一個簡單的 select 時,我收到此錯誤:

屬性“CreBranches.BranchCode”、“CreBranches.Id”被配置為使用“Identity”值生成器並映射到同一個表“Cre_branches”。 每個表只能配置一列作為“身份”。 為不應使用“Identity”的屬性調用“ValueGeneratedNever”。

CRE_BRANCHES:

在此處輸入圖像描述

當我刪除 ValueGeneratedOnAdd() 時,它可以工作。 有人知道該怎么做嗎?

我終於解決了這個問題。

問題是我沒有為 Oracle 中的數字列設置默認值。 我將這些列的默認值設置為 NULL 並使用以下命令解決了問題:

ALTER TABLE table_name MODIFY column_name DEFAULT NULL;

所以,在搭建好數據庫之后,EF在流暢的API中添加了.HasDefaultValueSql("NULL"):

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

謝謝你們。

按照慣例,EF 假定列 ID 是標識列。 在數值列上使用.ValueGeneratedOnAdd() 也會生成一個標識列。 一張表只能有一個標識列。 請查看 EF 文檔以了解列名約定和ValueGeneratedOnAdd方法以獲取更多詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM