簡體   English   中英

無法將值 NULL 插入到列“Id”中,實體框架

[英]Cannot insert the value NULL into column 'Id', Entity framework

我有以下模型:

Services.StradaDataReview2Model.UOSChangeLog:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }

public int Accident_nr { get; set; }

public int Refnr { get; set; }

public int Action { get; set; }

public string Old_data { get; set; }

public string New_data { get; set; }

public DateTime SearchedFromDate { get; set; }

public DateTime SearchedToDate { get; set; }

public DateTime Changed { get; set; }

public string Username { get; set; }

public string Comment { get; set; }

Contracts.DataContracts.UOSChangeLog

public class UOSChangeLog
{
    public int Id { get; set; }
    public int Accident_nr { get; set; }
    public int Refnr { get; set; }
    public int Action { get; set; }
    public string Old_data { get; set; }
    public string New_data { get; set; }
    public DateTime SearchedFromDate { get; set; }
    public DateTime SearchedToDate { get; set; }
    public DateTime Changed { get; set; }
    public string Username { get; set; }
    public string Comment { get; set; }
}

這是我插入的方式:

internal static bool SaveUOSChangeLog(List<Contracts.DataContracts.UOSChangeLog> values, string user)
{
    try
    {
        using (var ctx = new StradaDataReviewContext2())
        {
            var newVal = Mapper.Map<List<Contracts.DataContracts.UOSChangeLog>, List<Services.StradaDataReview2Model.UOSChangeLog>>(values);
            foreach(var val in newVal)
            {
                val.Username = user;
                val.Changed = DateTime.Now;
                ctx.UOSChangeLog.Add(val);
            }

            ctx.SaveChanges();
            return true;
        }
    }
}

當我運行代碼時,出現以下錯誤:

InnerException = {"無法將值 NULL 插入列 'Id',表 'StradaDataReview.dbo.UOSChangeLog';列不允許為空。INSERT 失敗。\\r\\n語句已終止。"}

如何使Id列自動遞增?

我猜您正在使用 Code First,按照慣例,它會將 Id 屬性設置為相應表中的主鍵,默認情況下,該表將被定義為“身份”。 我認為沒有必要設置 [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 屬性。 我將首先檢查數據庫以查看是否在相應的表中將 Id 列創建為 Identity 列。 你還在使用 Fluent API 定義任何東西嗎?

這是您注釋自動遞增字段的方式

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]

嘗試添加: [DatabaseGenerated(DatabaseGeneratedOption.None)]而不是Identity

在您的 ID 字段中,例如:

[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Id { get; set; }

您的 ID 是主鍵 - 因此不允許出現空值。 這是因為您的記錄 ID 必須是唯一的。

暫無
暫無

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

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