2016-03-18 3 views
2

У меня есть следующие модели:Не удается вставить значение NULL в столбец 'Id', рамки Entity

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

Я думаю, вы используете Code First, который по соглашению будет установить свойство Id в качестве первичного ключа в соответствующей таблице, по умолчанию будет уже определяется как «Идентичность». Я думаю, что нет необходимости устанавливать атрибут [DatabaseGenerated (DatabaseGeneratedOption.Identity)]. Я бы сначала проверил базу данных, чтобы увидеть, была ли в соответствующей таблице столбец Идентификатор столбцом Identity. Также вы определяете что-либо, используя Fluent API?

+0

Спасибо, очень. – Bryan

0

Ваш идентификатор является первичным ключом - поэтому nulls не допускаются. Это связано с тем, что идентификатор вашей записи должен быть уникальным.

2

Это, как вы аннотировать поле авто увеличивается

[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
+0

Я все еще получаю ту же ошибку. Я не хочу присваивать свой Id-свойство значение при добавлении с фреймворком сущности. Я хочу, чтобы свойство автоматически обновлялось. – Bryan

+0

Это позволит автоматически присваивать значение, как вы просили. – Ric

+0

@ Ric: Но я все равно получаю ту же ошибку. – Bryan

Смежные вопросы