Наборы DbSet в DbContext имеют значение null .NET Core 6

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

Вот первая половина моей модели (она соответствует представлению в моей базе данных SQL Server):

[Table("vwAccounts")]
public class Account
{
    [Column("AccountId")]
    public int Id { get; set; }

    [Column("AccountUserName")]
    public string UserName { get; set; }
    
    [Column("AccountPassword")]
    public string Password { get; set; }

    [Column("AccountActive")]
    public bool Active { get; set; }

    [Column("CompanyId")]
    public int CompanyId { get; set; }

    [Column("DriverId")]
    public int DriverId { get; set; }

    [Column("AccountTypeName")]
    public string TypeName { get; set; }
}

Вот мой DbContext:

public class MyDbContext : DbContext
{
       
    public MyDbContext(DbContextOptions<MyDbContext> options) : base(options)
    { }

    public DbSet<Account> Accounts { get; set; }
    public DbSet<Driver> Drivers { get; set; }

}

Вот моя программа.cs:


var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MyDbContext>(options =>
    options.UseSqlServer("name=ConnectionStrings:myConString"));
builder.Services.AddControllersWithViews();

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

...
app.Run();

И вот где я пытаюсь получить доступ к DbSets, но они пусты:

 public IEnumerable<Account> GetAccounts()
 {
      try
      {
           // HERE is the error.
           // db.context.Accounts is null, so it doesn't matter what method I call from it, it throws the error
            Account results = dbContext.Accounts.First();
            Console.WriteLine(results);
                           
            return results;
       } catch (Exception ex)
       {
            Console.WriteLine(ex.Message);
            return null;
       }
}

Это фактическое сообщение об ошибке:

При использовании отладчика dbContext.Accounts не равно null, это {Microsoft.EntityFrameworkCore.Internal.InternalDbSet`1[MySite.Models.Entities.Account]}. Когда я пытаюсь получить доступ к чему-либо в dbSte, возникает проблема.

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

   at Microsoft.Data.SqlClient.SqlBuffer.get_Int32()
   at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable`1.Enumerator.MoveNext()
   at System.Collections.Generic.LargeArrayBuilder`1.AddRange(IEnumerable`1 items)
   at System.Collections.Generic.EnumerableHelpers.ToArray[T](IEnumerable`1 source)
   at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
   at System.Linq.SystemCore_EnumerableDebugView`1.get_Items()

Вы уверены, что dbContext.Accounts равно null, а не dbContext? Не могли бы вы поделиться всем классом?

Guru Stron 18.02.2023 00:00

Ничего из того, что я упустил, не должно относиться к проблеме. Класс учетных записей — это просто больше полей, а в program.cs просто больше настроек. Я могу попробовать обновить его, но я получил предупреждение о том, что слишком много кода

Uuuuuumm 19.02.2023 05:45

Судя по вашему коду, нет ничего необычного. Можете ли вы предоставить сообщение об ошибке? bwt, вы сначала используете код или сначала db в ядре ef?

Xinran Shen 20.02.2023 03:21

@XinranShen Что вы имеете в виду сначала код, а не сначала база данных? Ничего не генерируется автоматически, но сначала были разработаны таблицы. Если это то, о чем вы спрашиваете

Uuuuuumm 20.02.2023 14:12
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а...
Калькулятор CGPA 12 для семестра
Калькулятор CGPA 12 для семестра
Чтобы запустить этот код и рассчитать CGPA, необходимо сохранить код как HTML-файл, а затем открыть его в веб-браузере. Для этого выполните следующие...
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
О тренинге HTML JavaScript :HTML (язык гипертекстовой разметки) и CSS (каскадные таблицы стилей) - две основные технологии для создания веб-страниц....
Как собрать/развернуть часть вашего приложения Angular
Как собрать/развернуть часть вашего приложения Angular
Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?
Запуск PHP на IIS без использования программы установки веб-платформы
Запуск PHP на IIS без использования программы установки веб-платформы
Установщик веб-платформы, предлагаемый компанией Microsoft, перестанет работать 31 декабря 2022 года. Его закрытие привело к тому, что мы не можем...
Оптимизация React Context шаг за шагом в 4 примерах
Оптимизация React Context шаг за шагом в 4 примерах
При использовании компонентов React в сочетании с Context вы можете оптимизировать рендеринг, обернув ваш компонент React в React.memo сразу после...
0
4
64
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Я понял. После комментирования параметров, пока я не сузил проблему до этих свойств, я понял, что данные в базе данных имеют нулевые значения. Поэтому я исправил это, сделав свои целые числа обнуляемыми:

 [Column("CompanyId")]
 public Int32? CompanyId { get; set; }
        
 [Column("DriverId")]
 public Int32? DriverId { get; set; }

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