【问题标题】:Cannot insert the value NULL into column 'Id', Entity framework无法将值 NULL 插入“Id”列,实体框架
【发布时间】:2016-07-05 00:00:55
【问题描述】:

我有以下型号:

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 列?

【问题讨论】:

    标签: c# asp.net entity-framework


    【解决方案1】:

    我猜你正在使用 Code First,按照惯例,它会将 Id 属性设置为相应表中的主键,默认情况下将被定义为“Identity”。我认为没有必要设置 [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 属性。我会首先检查数据库,看看在相应的表中,Id 列是否已创建为 Identity 列。您是否还在使用 Fluent API 定义任何内容?

    【讨论】:

    • 非常感谢。
    【解决方案2】:

    这就是你如何注释一个自动递增的字段

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    

    【讨论】:

    • 我仍然遇到同样的错误。在添加实体框架时,我不想为我的 Id-property 分配一个值。我希望属性自动更新。
    • 这将允许根据您的要求自动分配值。
    • 看你的错误信息很奇怪。如果您没有分配它,则 Id 的值应该为 0,因为它是 int 而不是 int?请发布您的完整模型类和您用于保存的完整方法。
    • 您好,我遇到了同样的问题。当我的数据库中的 Id 为 0 时,Id 的值是否会自动增加?
    【解决方案3】:

    尝试添加:[DatabaseGenerated(DatabaseGeneratedOption.None)] 而不是 Identity

    在您的 ID 字段中,喜欢:

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

    【讨论】:

      【解决方案4】:

      您的 ID 是主键 - 因此不允许使用空值。这是因为您的记录 ID 必须是唯一的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-25
        • 1970-01-01
        • 2015-10-18
        • 1970-01-01
        • 2023-03-04
        相关资源
        最近更新 更多