«Недопустимое имя столбца» при создании выпадающего списка с помощью «new SelectList ()»

#c# #asp.net-core

#c# #asp.net-core

Вопрос:

Я получил ошибку в названии при создании простого выпадающего списка. Это мое мнение:

 <td>
     <select asp-for="ThisShutdown.Id" asp-items=@(new 
          SelectList(Model.ListOfAllGGGs,"Id","Location"))>
          <option>Selelct a GGG</option>                    
     </select>  
</td>
  

ViewModel:

 public class PlannerViewModel
{
    public GGGShutdown ThisShutdown { get; set; }
    public IEnumerable<GGGShutdown> ExistingShutdowns { get; set; }
    public IEnumerable<GGG> ListOfAllGGGs { get; set; }
}
  

Контроллер:

 public class PlannerController : Controller
{
    private readonly IGGGRepository _GGGRepository;
    private readonly IGGGShutdownRepository _GGGShutdownRepository;

    public PlannerController (IGGGShutdownRepository GGGShutdownRepository, IGGGRepository GGGRepository)
    {
        _GGGShutdownRepository = GGGShutdownRepository;
        _GGGRepository = GGGRepository;
    }

    public IActionResult ShowGGGShutdowns()
    {
        IEnumerable<GGGShutdown> CurrentShutdowns = _GGGShutdownRepository.GGGShutdowns;
        IEnumerable<GGG> AllGGGs = _GGGRepository.GGGs;

        PlannerViewModel MyViewModel = new PlannerViewModel();
        MyViewModel.ExistingShutdowns = CurrentShutdowns;
        MyViewModel.ListOfAllGGGs = AllGGGs;
        return View(MyViewModel);
    }
}
  

Для информации, это класс GGG, который я использую для создания выпадающего списка:

 public class GGG
{
    [Key]
    public Guid Id { get; set; }
    public string Location { get; set; }
    public string Country { get; set; }
    public string CustomerName { get; set; }
    public string PlantModel { get; set; }
    public string EntrySystem { get; set; }
    public string Technology { get; set; }
}
  

Есть идеи, как заставить это работать?

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

1. Не могли бы вы показать нам форму вашей таблицы GGG в базе данных, пожалуйста?

2. Привет, CodeNotFound. Я использую ядро EF, поэтому часть кода «public class GGG» на самом деле является формой моей базы данных, не так ли? Мои столбцы: Идентификатор, местоположение, страна, имя_клиента, PlantModel, Entrysystem, Технология. (Я новичок, поэтому, возможно, я неправильно понял ваш вопрос).

3. Ваши имена столбцов меня устраивают. Не могли бы вы добавить полное сообщение об ошибке? Или проверьте внутреннее сообщение об исключении для получения дополнительной информации?

4. Сущность должна быть перекомпилирована, а классы c # должны обновляться при возникновении подобных ошибок. Существует несоответствие между классами c # и базой данных.

5. jdweng, CodeNotFound — вы были правы, архитектура в SQL отличалась от локальной. Я решил это следующим образом: 1) Стер самый последний снимок 2) Создал «add-migration new», который создал всю БД 3) Закомментировал все, кроме таблицы GGG 4) Вручную стер в БД таблицу GGG 5) Update-database, которая воссоздала GGG в базе данных… Я все еще тестирую, поэтому данные внутри были не так важны, но мне интересно, что я мог бы сделать, если бы не хотел потерять данные в GGG. EF кажется не очень надежным

Ответ №1:

Ошибка «Недопустимое имя столбца» почти всегда возникает из-за того, что ваш объект не синхронизирован с таблицей, которая представляет его в вашей базе данных. Возможно, вы переименовали свойство, добавили новое свойство и т. Д. И пренебрегли созданием новой миграции. Или, если вы используете существующую базу данных, вам может потребоваться повторно объединить объекты из вашей базы данных. В любом случае либо Id или Location не совпадает с фактическим столбцом в вашей таблице. Выясните, почему, и ваша проблема решена.

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

1. Как было прокомментировано ранее: да, действительно; архитектура в SQL отличалась от локальной. Я решил это следующим образом: 1) Стер самый последний снимок 2) Создал «add-migration new», который создал всю БД 3) Закомментировал все, кроме таблицы GGG 4) Вручную стер в БД таблицу GGG 5) Update-database, которая воссоздала GGG в базе данных… Я все еще тестирую, поэтому данные внутри были не так важны, но мне интересно, что я мог бы сделать, если бы не хотел потерять данные в GGG. EF кажется не очень надежным

2. Вы не должны были удалять снимок. Когда вы вносите изменения в свои объекты, вы просто создаете новую миграцию, и она применяет изменения схемы, необходимые для соответствия сущности.