Поскольку вы пытаетесь выполнять операции с БД в макете (который не содержит модель), Внедрение зависимостей может вам помочь.
Вы можете определить класс, который имеетметоды с доступом к БД, зарегистрируйте его в своих службах и легко используйте его методы из любого View / Controller / pageModel
Я объясню с помощью кода:
Вот наша зависимость:
public class MyDependency
{
// You can use dependency injection in a chained fashion,
// DBContext is injected in our dependency
private readonly DBContext _dbContext;
public MyDependency(DBContext dbContext)
{
_dbContext = dbContext;
}
// Define a method that access DB using dbContext
public bool CheckInDb()
{
return dbContext.SomeCheck();
}
}
Зарегистрируйте его в своих службах в своем Startup
(Ваша зависимость должна быть зарегистрирована после того, как DBContext был зарегистрирован)
public void ConfigureServices(IServiceCollection services)
{
// Some code here
services.AddDbContext<DBContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddScoped<MyDependency>();
}
Затем в вашем макете:
@inject MyDependency MyDependency
@if(MyDependency.CheckInDb())
{
// Do something
}
else
{
// Do something else
}