Я пытаюсь получить доступ к списку через Entity Framework, сбросить мне ошибку встроенной безопасности

Я настроил тестовый веб-сайт, через который я буду получать доступ к базе данных и просматривать содержимое в базе данных, на веб-сайте я увижу таблицу из базы данных.

Работаю в Visual Studio 2017, .NET Core Framework 2.0, пишу код на C# 7.1. Я обновлял пакет nuget Microsoft.EntityFrameworkCore.SqlServer (2.2.2).

Приложение использует ASP.NET Core, база данных Northwind Microsoft в SQL Server.

Примечание: я учусь программировать по книге: C# 7.1 и .NET Core 2.0 компании Packt.

Когда я пытаюсь получить доступ к списку с указанным кодом

public class SuppliersModel : PageModel
{
    private Northwind db;

    public SuppliersModel(Northwind injectedContext)
    {
        db = injectedContext;
    }

    public IEnumerable<string> Suppliers { get; set; }

    public void OnGet()
    {
         ViewData["Title"] = "Northwind Web Site - Suppliers";
         Suppliers = db.Suppliers.Select(s => s.CompanyName).ToArray();
    }
}

Я получаю сообщение об ошибке:

System.Data.Common.DbConnectionOptions.ParseInternal(Dictionary parsetable, string connectionString, bool buildChain, Dictionary synonyms, bool firstKey)
...
NorthwindWeb.Pages.SuppliersModel.OnGet() in Suppliers.cshtml.cs
+ Suppliers = db.Suppliers.Select(s => s.CompanyName).ToArray();

Пожалуйста, обновите свой вопрос, указав полный стек вашего исключения.

Darren Wainwright 19.02.2019 15:06
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
72
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Вы устанавливаете IEnumerable как строку, когда я думаю, что вы хотите использовать класс.

В настоящее время вы просто объявляете список строк, в котором не будет имени компании-собственника.

Я думаю, это должно быть

    IEnumerable<Supplier> 

Если бы класс был

   public class Supplier
   {
        public string ComapnyName
   }

Чтобы уточнить, при объявлении IEnumerable или списка все, что вы помещаете в <>, является типом объекта в коллекции, поэтому, объявляя IEnumerable строки, вы можете иметь только список строк, и у них не будет имени свойства, как

"test"
"test2"
"etc"

объявив IEnumerable класса поставщика, это будет список этого класса, например

[0] Supplier.CompanyName = "ltd"
[1] Supplier.CompanyName = "PLC"

и вы можете ссылаться в своем коде, используя

Suppliers[0].CompanyName

Я добавил публичный класс:

public class Supplier
{   
    public int SupplierID { get; set; }
    public string CompanyName { get; set; }
    public string ContactName { get; set; }
    public string ContactTitle { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
    public string Region { get; set; }
    public string PostalCode { get; set; }
    public string Country { get; set; }
    public string Phone { get; set; }
    public string Fax { get; set; }
    public string HomePage { get; set; }
    public ICollection<Product> Products { get; set; }

}

и для подключения к серверу

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
        services.AddDbContext<Northwind>(options => options.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=Northwind;Trusted_Connection=True;MultipleActiveResultSets=true"));
    }

Спасибо за помощь

Трудно сказать, в чем ошибка, исходя из того, что вы опубликовали. Можете ли вы обновить и опубликовать полученное исключение? Убедитесь, что строка подключения, используемая в переданном вами injectionContext, верна, и файл .cshtml также правильно обрабатывает массив. Код, который вы разместили здесь, в порядке, поэтому я подозреваю, что за пределами этого класса Model есть ошибка конфигурации.

Ребят спасибо за помощь, после перезапуска Visual Studio проблема решилась.

Могу ли я проверить в Visual Studio, какие изменения я сделал в коде?

Что-то вроде последних правок?

Самое ужасное, что я не знаю, что я сделал, чтобы код сработал.

Большую помощь оказали ваши комментарии.

Другие вопросы по теме