.NET Core C# MVC DBContext 在类文件中为 Null



我有一个解决方案,里面有几个'项目'。一个是 MVC Web 应用,另一个是类库。

在我的 MVC Web App Startup 中.cs我正在注册 DbContext:

public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddSession();
services.AddHttpContextAccessor();
services.AddMemoryCache();
services.AddSingleton<Controllers.HomeController>();
services.AddRouting(options => options.LowercaseUrls = true);
services.AddDbContext<AffiliateDatabaseContext>();
}

我在类库中设置了所有上下文,并在应用程序设置(工作(中设置了配置连接字符串:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
IConfigurationRoot configuration = new ConfigurationBuilder().SetBasePath(AppDomain.CurrentDomain.BaseDirectory).AddJsonFile("appsettings.json").Build();
optionsBuilder.UseSqlServer(configuration.GetConnectionString("CustomerBilling"));
}
}

我正在尝试在我的类库中的类文件中使用 DBContext,执行 DI:

private static AffiliateDatabaseContext affilContext;
public PromotionLogic(AffiliateDatabaseContext _affilContext)
{
affilContext = _affilContext;
}
public static IEnumerable<AffPromotion> GetAllPromotions()
{
return affilContext.AffPromotion.Include("Company").Include("PromotionType").Include("Audience").Include("PromotionSportLink").Include("AffPromotionImage").OrderBy(x => x.Priority).AsEnumerable();
}

但是affilContext似乎为空,并且不断收到以下错误:

System.NullReferenceException: 'Object reference 未设置为 对象的实例。

我做错了吗?我需要接口还是其他东西?它似乎在控制器中工作正常。

另一种方法是将DBContext作为参数传递给函数吗?

问题是您正在分配给instance构造函数中的static字段。由于您从不调用构造函数,因此该字段将保持null。解决方案是使用实例字段(无static(。

因此:

private static AffiliateDatabaseContext affilContext;

必须是:

private AffiliateDatabaseContext affilContext;

进行此更改后,任何使用affilContextstatic方法都需要更改为非静态(即删除static(。

您可能想将变量保留为static。一般来说,对于数据库上下文来说,这不是一个好主意。它们不是为长寿命而设计的,也不是线程安全的。因此static数据库上下文不适合在 Web 应用程序中使用。

相关内容

  • 没有找到相关文章

最新更新