Я продолжаю получать «нулевой контекст бд», когда я заявляю, что быть пустым или пустым нормально, как я могу это исправить?

#c# #database #visual-studio #exception #razor-pages

Вопрос:

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

Это в моем классе DVDDataSQL:

 public IEnumerable<DVD> GetDVDs(string name = null)
    {
        var param = !string.IsNullOrEmpty(name) ? $"{name}%" : name;
        return scandiwebTestDbContext.DVDs.Where(r => string.IsNullOrEmpty(name) || EF.Functions.Like(r.Name, param)).ToList();
    }
 

Это в моем интерфейсе Idvddata :

 public interface IDVDData
{
    DVD GetProductById(int DvdId);
    DVD Create(DVD Dvd);
    int Commit();
    DVD Delete(int DvdId);
   
    IEnumerable<DVD> GetDVDs(string name = null);
  
}
 

и это мой класс бд:

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

    }

   
    public DbSet<DVD> DVDs { get; set; }
    public DbSet<Book> Books { get; set; }
    public DbSet<Furniture> Furnitures {get;set;}
}
 

у меня это в программе запуска добавлено

 public void ConfigureServices(IServiceCollection services)
    {
        services.AddRazorPages();
        services.AddMvc();
        services.AddDbContext<ScandiwebTestDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("ScandiDb")));
        services.AddScoped<IDVDData, DVDDataSQL>();
        services.AddScoped<IBookData, BookDataSQL>();
        services.AddScoped<IFurnitureData, FurnitureDataSQL>();
    }
 

я четко заявил, что это нормально, быть пустым или пустым, но это вызывает исключение, что его нулевой эфирный путь. у меня никогда раньше не было этой проблемы, и я всегда делал такие вещи, как это, я не уверен, что что-то упускаю?

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

1. Можете ли вы показать весь код, пожалуйста? Как вы инициализируете scandiwebTestDbContext?

2. я добавил все, что я подключил к классу бд

Ответ №1:

вы должны ввести свой dbcontext, что-то вроде этого

 public class DVDData : IDVDData
{

private readonly ScandiwebTestDbContext _scandiwebTestDbContext
public  DVDData (ScandiwebTestDbContext scandiwebTestDbContext)
{
   _scandiwebTestDbContext=scandiwebTestDbContext;
}

.....
public IEnumerable<DVD> GetDVDs(string name = null)
    {
        var param = !string.IsNullOrEmpty(name) ? $"{name}%" : name;
        return _scandiwebTestDbContext.DVDs.Where(r => string.IsNullOrEmpty(name) || EF.Functions.Like(r.Name, param)).ToList();
    }

}
 

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

1. Боже мой, как я могла это забыть … большое тебе спасибо !!

2. @Дэвид, добро пожаловать!