2016-03-18 51 views
2

我有以下型号:无法将NULL值插入列 'ID',实体框架

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 = {"Cannot insert the value NULL into column 'Id', table 'StradaDataReview.dbo.UOSChangeLog'; column does not allow nulls. INSERT fails.\r\nThe statement has been terminated."}

我怎样才能让Id列的自动增量?

回答

2

我猜你是使用代码首先,它按照惯例将ID属性设置为相应的表的主键,默认情况下会一直定义为'身份'。我认为没有必要设置[DatabaseGenerated(DatabaseGeneratedOption.Identity)]属性。我会首先检查数据库,看看是否在相应的表中将Id列创建为标识列。你也使用Fluent API来定义任何东西吗?

+0

非常感谢。 – Bryan

0

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

2

这是你如何诠释一个自动递增领域

[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
+0

我仍然得到相同的错误。添加实体框架时,我不想为我的Id属性赋值。我希望该属性自动更新。 – Bryan

+0

这将允许按照您的要求自动分配值。 – Ric

+0

@Ric:但我仍然得到同样的错误。 – Bryan

相关问题