#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");
}
}