Entity Framework вставляет null, несмотря на предоставление значения

#c# #sql-server #asp.net-mvc-5 #entity-framework-6

#c# #sql-сервер #asp.net-mvc-5 #entity-framework-6

Вопрос:

Я пытаюсь использовать entity Framework для сохранения данных в таблице SQL Server. Я использую подход DB first. Однако я продолжаю получать эту ошибку, которая user_id равна null, но я назначил ее в коде:

Не удается вставить значение NULL в столбец ‘user_id’, таблица ‘dbo.Столбец Users’; не допускает нулей. ОШИБКА вставки.
Оператор был завершен.

Вот мой код:

     public ActionResult SaveUser(User user)
    {
        using (DBEntities entities = new DBEntities())
        {
            int maxUserId = entities.Users
                .Select(u => u.user_id)
                .DefaultIfEmpty(0)
                .Max();

            user.user_id = maxUserId   1;

            entities.Users.Add(user);                
            entities.SaveChanges();

            return RedirectToAction("Index", "Users");
        }
    }
  

Пользовательский класс:

 public partial class User
{  
    public int user_id { get; set; }
    public string username { get; set; }
    public Nullable<System.DateTime> Date_Captured { get; set; }       
}
  

Спасибо.

Комментарии:

1. Даже если бы это сработало, это неправильный подход к получению уникального идентификатора. Это небезопасно, если несколько запросов поступают примерно в одно и то же время. Используйте IDENTITY столбец или явное SEQUENCE на стороне сервера.

Ответ №1:

Если пользователей нет, идентификатор пользователя вернет null, и, следовательно, новый пользователь не может быть вставлен. Это неправильный способ получить уникальный идентификатор. См. Комментарий от @Jeroen Mostert

Ответ №2:

 public partial class User
{  
[Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int user_id { get; set; }
    public string username { get; set; }
    public Nullable<System.DateTime> Date_Captured { get; set; }       
}


public ActionResult SaveUser(User user)
    {
        using (DBEntities entities = new DBEntities())
        { // dont set Id    
            entities.Users.Add(user);                
            entities.SaveChanges();

            return RedirectToAction("Index", "Users");
        }
    }