Я читал учебное пособие по ASP.NET Core и Entity Framework Core. Я могу подключиться к своей базе данных Microsoft SQL Server, получить и добавить строки, но не могу их обновить. Мой метод обновления присоединяет нового пользователя, а затем устанавливает состояние для изменения.
Каждый раз, когда я получаю сообщение об ошибке:
System.InvalidOperationException: «Свойство Id» для типа объекта «UserData» имеет временное значение при попытке изменить состояние объекта на «Изменено». Либо задайте постоянное значение явно, либо убедитесь, что база данных настроена для генерации значений для этого свойства. '
Я попытался установить свойство первичного ключа для сгенерированной базы данных и приложил все усилия, чтобы реализовать это в базе данных, но я не уверен, что оно работает. Я также попытался запустить обновление SQL с помощью метода FromSQL, но ничего не изменилось (у меня есть похожая и, вероятно, отдельная проблема, когда я пытаюсь удалить).
Вот метод обновления из реализации контекста БД:
public UserData Update(UserData updatedUser)
{
var entity = db.Users.Attach(updatedUser);
entity.State = EntityState.Modified;
//db.Users.FromSql<UserData>($"UPDATE Users SET user_name={updatedUser.user_name}, first_name={updatedUser.first_name}, last_name={updatedUser.last_name}, age={updatedUser.age}, email={updatedUser.email} WHERE");
return updatedUser;
}
Я сохраняю изменения в другом методе, который вызывается сразу после этого.
Вот моя модель данных:
public class UserData
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Int64 Id { get; set; }
public string user_name { get; set; }
public string first_name { get; set; }
public string last_name { get; set; }
public int age { get; set; }
public string email { get; set; }
}
По сути, я просто хочу обновить пользователя новой информацией, и я пытаюсь использовать присоединение и сущность. Измените метод, используемый в учебнике, которому я следую, но если есть лучший способ, я тоже открыт для этого.
РЕДАКТИРОВАТЬ : решение находится в комментарии, который я пометил как ответ. На моей странице .cshtml я не связывал идентификатор пользователя с полем ввода, поэтому по умолчанию он был установлен на «0».