![](/img/trans.png)
[英]ASP.NET Core Entity Framework- InvalidOperationException in dbModel context
[英]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.