簡體   English   中英

實體框架SaveChanges():未發送主鍵列的值

[英]Entity Framework SaveChanges(): Value of primary key column not being sent in

我剛開始嘗試使用Entity Framework。 我創建了一個像這樣的表:

CREATE TABLE WORK_EFFORT
(
    K__ID BIGINT,
    NAME NTEXT,
    DESCRIPTION NTEXT
)

我也定了

K__ID

成為主鍵。

回到我的業務層,當我運行以下代碼時,

var db = new ENTERPRISE_context();

var workEffort = new WORK_EFFORT
{
    K__ID = 1,
    NAME = "merhaba, dünya",
    DESCRIPTION = "merhaba, dünya"
};
db.WORK_EFFORT_set.Add(workEffort);

db.SaveChanges();

我得到了

Cannot insert the value NULL into column 'K__ID', table 'ENTERPRISE.dbo.WORK_EFFORT'; column does not allow nulls. INSERT fails.
The statement has been terminated.

錯誤。 SQL分析顯示以下RPC發送到SQL Server:

exec sp_executesql N'INSERT [dbo].[WORK_EFFORT]([NAME], [DESCRIPTION])
VALUES (@0, @1)
SELECT [K__ID]
FROM [dbo].[WORK_EFFORT]
WHERE @@ROWCOUNT > 0 AND [K__ID] = scope_identity()',N'@0 nvarchar(max) ,@1 nvarchar(max) ',@0=N'merhaba, dünya',@1=N'merhaba, dünya'

為了您的信息,上面的支持代碼是這樣的:

namespace Web.Models
{
    public partial class WORK_EFFORT
    {
        public long K__ID { get; set; }    
        public string NAME { get; set; }
        public string DESCRIPTION { get; set; }
    }
}

namespace Web.Models.Mapping
{
    public partial class WORK_EFFORT_map : EntityTypeConfiguration<WORK_EFFORT>
    {
        public WORK_EFFORT_map()
        {
            this.HasKey(t => t.K__ID);

            this.ToTable("WORK_EFFORT");

            this.Property(t => t.K__ID).HasColumnName("K__ID");
            this.Property(t => t.NAME).HasColumnName("NAME");
            this.Property(t => t.DESCRIPTION).HasColumnName("DESCRIPTION");
        }
    }
}

namespace Web.Models
{
    public partial class ENTERPRISE_context : DbContext
    {
        static ENTERPRISE_context()
        {
            Database.SetInitializer<ENTERPRISE_context>(null);
        }

        public ENTERPRISE_context() : base("Name=ENTERPRISE_context") { }

        public DbSet<WORK_EFFORT> WORK_EFFORT_set { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Configurations.Add(new WORK_EFFORT_map());
        }
    }
}

根據你的SQL插入語句,EF認為K__ID是一個錯誤的標識列。 在映射的以下行中指定HasDatabaseGeneratedOption,並指定None:

Property(t => t.K__ID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

暫無
暫無

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

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