nopSolutions/nopCommerce · error · Exception
"{tcName}" tax category could not be loaded
Error message
"{tcName}" tax category could not be loaded What it means
Thrown by getTaxCategoryId during sample-product installation. It looks up a TaxCategory by name via GetFirstEntityIdAsync; a null result means the referenced tax category was never seeded, so products cannot be assigned that tax category. As with the other sample-data lookups, it indicates the base tax-category seeding was skipped or the sample data references a name that does not exist.
Source
Thrown at src/Libraries/Nop.Services/Installation/InstallSampleData.Products.cs:133
return id;
id = await foo(key);
dict[key] = id;
return id;
}
async Task<int> getProductTemplate(string templateName)
{
return await getAndSaveId(productTemplates, templateName,
async tName => await GetFirstEntityIdAsync<ProductTemplate>(pt => pt.Name == tName) ??
throw new Exception($"\"{tName}\" template could not be loaded"));
}
async Task<int> getTaxCategoryId(string taxCategoryName)
{
return await getAndSaveId(taxCategories, taxCategoryName, async tcName => await GetFirstEntityIdAsync<TaxCategory>(tc => tc.Name == tcName) ??
throw new Exception($"\"{tcName}\" tax category could not be loaded"));
}
async Task<int> getCategoryId(string categoryName)
{
return await getAndSaveId(categories, categoryName, async cName => await GetFirstEntityIdAsync<Category>(c => c.Name == cName) ??
throw new Exception($"\"{cName}\" category could not be loaded"));
}
async Task<int> getManufacturerId(string manufacturerName)
{
return await getAndSaveId(manufacturers, manufacturerName, async mName => await GetFirstEntityIdAsync<Manufacturer>(m => m.Name == mName) ??
throw new Exception($"\"{mName}\" manufacturer could not be loaded"));
}
async Task<int> getProductAttributeId(string productAttributeName)
{
return await getAndSaveId(productAttributes, productAttributeName, async paName => await GetFirstEntityIdAsync<ProductAttribute>(pa => pa.Name == paName) ??
throw new Exception($"\"{paName}\" product attribute could not be loaded"));View on GitHub (pinned to 64bdf2ff08)
Solutions
- Run the base installer (which seeds tax categories) before sample product data.
- Verify referenced TaxCategory names exist in the DB before sample install.
- Correct tax-category names in the sample-data source.
- Reinstall from a clean database.
Example fix
// before
async tName => await GetFirstEntityIdAsync<TaxCategory>(tc => tc.Name == tName)
?? throw new Exception($"\"{tcName}\" tax category could not be loaded")
// after
var id = await GetFirstEntityIdAsync<TaxCategory>(tc => tc.Name == taxCategoryName);
if (id == 0)
throw new InvalidOperationException($"Tax category '{taxCategoryName}' not found. Seed tax categories first."); Defensive patterns
Strategy: validation
Validate before calling
// Verify referenced tax categories exist before sample install
var needed = new[] { "Tax exempt", "Standard" };
var missing = needed.Except(await Table<TaxCategory>().Select(tc => tc.Name).ToListAsync());
if (missing.Any())
throw new InvalidOperationException($"Missing tax categories: {string.Join(", ", missing)}"); Type guard
static async Task<bool> TaxCategoryExistsAsync(IRepository<TaxCategory> repo, string name)
=> await repo.Table.AnyAsync(tc => tc.Name == name); Try / catch
try { await getTaxCategoryId(name); }
catch (Exception ex) when (ex.Message.Contains("tax category could not be loaded"))
{ /* log missing name + available categories; abort sample install */ } Prevention
- Seed tax categories before installing sample products.
- Keep tax-category names in sample data aligned with seeded names.
- Reinstall from a clean DB.
When it happens
Trigger: Installing sample product data referencing a TaxCategory name not present in the DB; running sample install before the base tax-category seeding; a name mismatch between sample data and seeded categories.
Common situations: Partial install missing tax-category seeding; version change where default tax-category names differ; custom sample-data file with wrong names.
Related errors
- "{tName}" template could not be loaded
- "{cName}" category could not be loaded
- "{mName}" manufacturer could not be loaded
- Default email account cannot be loaded
- No default store could be loaded
AI-assisted analysis of nopSolutions/nopCommerce@64bdf2ff08 (2026-08-13).
Data as JSON: /api/errors/4399c3c91d99dc80.
Report an issue: GitHub.