2016-03-18 50 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

相關問題