无法将值NULL插入到列'Id',Entity框架中

时间:2016-03-18 09:38:19

标签: c# asp.net 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列?

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

这是注释自动增量字段的方法

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]

答案 2 :(得分:0)

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

在您的ID字段中,例如:

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

答案 3 :(得分:-1)

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