Today was the second day since I noticed this exception:
A database operation failed while processing the request. SqliteException: SQLite Error 14: 'unable to open database file'.
Applying existing migrations may resolve this issue There are migrations that have not been applied to the following database(s):BlazorWebAppAdminContext
- 20250708123456_MyArgumentName
- 20250709789101_MyNewArgumentName1.0.0
- 20250710111213_MyNewArgumentName1.0.2
Apply Migrations this is actually a button
In Visual Studio, you can use the Package Manager Console to apply pending migrations to the database:
PM> Update-DatabaseAlternatively, you can apply pending migrations from a command prompt at your project directory:
dotnet ef database update
NOTE: my .NET Core hosting bundle on Windows Server installed is dotnet-hosting-9.0.6-win.exe
I failed to apply the specific solution to this issue, even though I already did these workarounds:
Ensuring that
IIS_IUSRShas read and write permissions:In development (debug mode), I ensure that the Blazor web app is already using the updated data model and has successfully applied migrations and updated the SQLite database:
using System.ComponentModel.DataAnnotations;
namespace MyBlazorWebAppName.Models;
public class Admin
{
[Key]
public string? UserID { get; set; }
public string? Username { get; set; }
[Required]
[StringLength(100)]
[RegularExpression(@"^[A-Z]+[a-zA-Z\s-]*$")]
public string? GivenName { get; set; }
public string? MiddleName { get; set; }
[Required]
[StringLength(100)]
[RegularExpression(@"^[A-Z]+[a-zA-Z\s-]*$")]
public string? FamilyName { get; set; }
[Required]
[StringLength(150, MinimumLength = 11)]
public string? EmailAdd { get; set; }
[Required]
[StringLength(100, MinimumLength = 3)]
[RegularExpression(@"^[A-Z]+[a-zA-Z\s-]*$")]
public string? RoleType { get; set; }
}
Relevant references: Edit Application Pool; IIS Application pools CLR v4.0 vs No managed code
Ensuring that the Blazor web app that is hosted in IIS is configured properly:
Ensuring that every folder and file generated by this command
dotnet publish --configuration Releaseand located in{project directory}\bin\Release\net9.0\publishis properly in place at the designated physical path:
Here is my relevant source code:
Program.cs:
using MyBlazorWebAppName.Components;
using Microsoft.EntityFrameworkCore;
using MyBlazorWebAppName.Data;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContextFactory<BlazorWebAppAdminContext>(options =>
options.UseSqlite(builder.Configuration.GetConnectionString("BlazorWebAppAdminContext") ?? throw new InvalidOperationException("Connection string 'BlazorWebAppAdminContext' not found.")));
builder.Services.AddQuickGridEntityFrameworkAdapter();
builder.Services.AddDatabaseDeveloperPageExceptionFilter();
// Add services to the container.
builder.Services.AddRazorComponents()
.AddInteractiveServerComponents();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error", createScopeForErrors: true);
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
app.UseMigrationsEndPoint();
}
app.UseHttpsRedirection();
app.UseAntiforgery();
app.MapStaticAssets();
app.MapRazorComponents<App>()
.AddInteractiveServerRenderMode();
app.Run();
BlazorWebAppAdminContext.cs:
using Microsoft.EntityFrameworkCore;
namespace MyBlazorWebAppName.Data
{
public class BlazorWebAppAdminContext(DbContextOptions<BlazorWebAppAdminContext> options) : DbContext(options)
{
public DbSet<Models.Admin> Admin { get; set; } = default!;
}
}
Note: if you find this different from the default generated file's source code after following the tutorial: Build a Blazor movie database app (Overview), it's because I simply followed the code refactoring suggestions provided by the .NET framework. Nevertheless, it's still working in debug mode.
appsettings.json:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"BlazorWebAppAdminContext": "Data Source=Data\\BlazorWebAppAdminContext-12345679-10111213-141516.db"
}
}
Take note: for reproducible concerns, on the generated file web.config, I needed to add this configuration to reveal the actual error, which I've provided at the very top portion of this question thread:
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>
Here's the full configuration of web.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\MyBlazorWebAppName.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess">
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>
</aspNetCore>
</system.webServer>
</location>
</configuration>
So, here are my questions after all these struggles in deploying my Blazor web app (.NET 9 [using Visual Studio Code]) with SQLite to IIS 8.5 on SQL Server 2012 R2 Standard:
- Has anybody else resolved the same issue as mine?
- Is this a bug or what?
- Do you see a misconfiguration on the project I am working with?
- Am I missing something here?
EDIT: I've found out that I was using the incompatible ASP.NET Core Runtime for .NET SDK 9.0.302
Regarding the given findings, I downloaded the aspnetcore-runtime-9.0.7-win-x64.exe and dotnet-hosting-9.0.7-win.exe and then installed both executable files. Source: Download .NET 9.0 - ASP.NET Core Runtime 9.0.7.
Thanks to this YouTube video: Deploy ASP.Net Core Web Application in IIS - Dot Net Core Hosting for the tutorial from which I then realized I was missing something and using an incorrect version of the hosting bundle.
Moreover, according to this thread: IIS app does not have permissions to access an SQLite db file (which I found that it's relevant), which I'll quote (let's jump directly to the answer to be straightforward):
You only need to [assign] the
iis_iusrsandiusrpermission to the inetpub folder.
So, I checked the inetpub folder on the Windows Server, and I found out that it is not yet added there.
I go to the inetpub properties > edit > (group of user names) add > advanced... (since I wasn't familiar with the absolute name) > find now > I look for {your server name}\IIS_IUSRS and IUSR
And in the permission for IIS_IUSRS and IUSR
I ensure these configurations:
Instead of this command:
dotnet publish --configuration Release
I found it more applicable to use this command instead (because my Windows Server is 64-bit):
dotnet publish -c Release -r win-x64
But, unfortunately, the problem persists.




