#c# #asp.net #model-view-controller #crud
#c# #asp.net #модель-представление-контроллер #crud
Вопрос:
Я пытаюсь отредактировать RoleName
в моей Roles
таблице. Все работает, за исключением того, что я получаю ошибки, связанные с отсутствием определения для Entry
и SaveChanges
методов. У меня есть using
инструкции для обоих System.Data.Entity
и EntityFramework
, поэтому я не уверен, в чем проблема. Я почти уверен, что у меня есть все правильные пакеты и ссылки.
//Get Edit
[HttpGet]
public ActionResult Edit(Roles model)
{
return View();
}
//Put Edit
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(Comtrex_ICU.Models.Roles model, int RoleId,
Roles RoleName)
{
try
{
Roles db = new Roles();
db.Entry(RoleName).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("RolesIndex");
}
catch
{
return View();
}
}
Комментарии:
1. Не могли бы вы, пожалуйста, предоставить определение класса Roles. Похоже, что компилятору не удалось найти два метода в классе Roles: Entry и SaveChanges
2. Почему в вашей подписи редактирования после публикации в нее передаются два экземпляра ролей? Что такое
Roles RoleName
и как это решается?
Ответ №1:
Поскольку вы, похоже, вызываете их не из репозитория, Entry
и SaveChanges
являются методами, принадлежащими вашим сущностям EntityFramework.
Вы пытаетесь вызвать их из экземпляра Roles
.
Вам нужно создать экземпляр ваших объектов как db
.
Вместо следующего:
Roles db = new Roles();
Вы должны сделать это (где Entities — это имя, которое вы дали своим сущностям):
Entities db = new Entities();
Теперь вы можете найти роль, которую хотите отредактировать, с помощью Find
:
var editRole = db.Roles.Find(RoleId);
Затем вам нужно сопоставить отредактированные свойства, а затем выполнить обновление.
Вы должны создавать экземпляры своих сущностей в конструкторе либо контроллера, либо хранилища служб, а не каждый раз, когда вам это нужно, но приведенный выше пример должен указать вам правильное направление.