簡體   English   中英

InvalidOperationException 在 ASP.Net Core 中使用上下文注入時

[英]InvalidOperationException When using Context Injection in ASP.Net Core

在我的 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 將基於 UserName 動態,但為了調試,我自己設置。

當我在程序中有這些類時,每當我在網絡應用程序上選擇一個 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;
            
        }

注入的原因是為了作為OnModelCreating內部的全局過濾器

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

這是通過刪除我在上下文中的空白構造函數來解決的。 所有的功勞都歸功於評論中的伊萬。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM