在ASP.NET核心中使用上下文注入時發生InvalidOperationException [英] InvalidOperationException When using Context Injection in ASP.Net Core

查看:0
本文介紹了在ASP.NET核心中使用上下文注入時發生InvalidOperationException的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

在我的ASP.NET核心Web應用程序中,我在啟動時使用以下命令連接到我的數據庫

services.AddDbContext<TimeSheetContext>(options =>
                options.UseSqlServer(Configuration.GetConnectionString("AzureSql")));

在我嘗試在我的DBContext類上注入之前,這工作得很好。

我有一個獲取登錄用戶的接口和類

public interface IGetUserProvider
{
    string UserName {get; }
    int BranchID {get; }
}

public class GetUserProvider : IGetUserProvider
{
    public string UserName { get; set; }
    public int BranchID { get; set; }    

    public GetUserProvider(IHttpContextAccessor accessor)
    {
        
        UserName = accessor.HttpContext?.User.Claims.SingleOrDefault(x => x.Type == UserName)?.Value;
        BranchID = 6108;
    }    
}

BranchID=6108將根據用戶名動態設置,但為了進行調試,我將自己設置它。

當我在程序中有這些類時,每當我在Web應用程序上選擇Razor頁面時,它都會拋出錯誤

InvalidOperationException:使用了命名連接字符串,但在應用程序的配置中找不到名稱""AzureSql""。

在后面的Razor代碼中調用上下文時發生異常,例如

public async Task OnGetAsync()
        {
            BranchHour = await _context.BranchHours
                .Include(b => b.Branch)
                .Where(d => d.BranchOpen.Date == DateTime.Today.Date)
                .OrderBy(b => b.Branch.BranchNumber)
                .ToListAsync();
        }

正如我所說,代碼在沒有注入的情況下運行得很好,但是當它被注入時,它聲稱沒有名為AzureSql的連接字符串,而實際上顯然有。我不得不假設錯誤是由其他原因引起的,但我似乎找不到它。

使用數據庫上下文編輯

public TimeSheetContext(DbContextOptions<TimeSheetContext> options, IGetUserProvider userProvider)
            : base(options)
        {
            User = userProvider.UserName;
            branchFilter = userProvider.BranchID;
            
        }

注入的原因是用作OnModel Creating中的全局篩選器

modelBuilder.Entity<Branch>().HasQueryFilter(b => b.ContractorCode == branchFilter);

推薦答案

通過刪除上下文中的空白構造函數解決了此問題。所有功勞都歸功于評論中的伊萬。

這篇關于在ASP.NET核心中使用上下文注入時發生InvalidOperationException的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持IT屋!

查看全文
登錄 關閉
掃碼關注1秒登錄
發送“驗證碼”獲取 | 15天全站免登陸
全免费A级毛片免费看无码播放