Я настроил тестовый веб-сайт, через который я буду получать доступ к базе данных и просматривать содержимое в базе данных, на веб-сайте я увижу таблицу из базы данных.
Работаю в 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();





Вы устанавливаете 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, какие изменения я сделал в коде?
Что-то вроде последних правок?
Самое ужасное, что я не знаю, что я сделал, чтобы код сработал.
Большую помощь оказали ваши комментарии.
Пожалуйста, обновите свой вопрос, указав полный стек вашего исключения.