Обновить / отредактировать запись в операциях C # CRUD

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

Затем вам нужно сопоставить отредактированные свойства, а затем выполнить обновление.

Вы должны создавать экземпляры своих сущностей в конструкторе либо контроллера, либо хранилища служб, а не каждый раз, когда вам это нужно, но приведенный выше пример должен указать вам правильное направление.