Данные не отправляются в базу данных

Всем привет. Пишу простенький проект - онлайн-магазин - с использованием Blazor Server App. Во время добавления новых товаров, пытаюсь сохранить эти добавленные товары. Нажимается на кнопку Сохранить, ровным счетом ничего не происходит - не записываются данные в базу данных. Вот код:

    @page "/addproduct"
    @using Data.Models
    @using System.ComponentModel.DataAnnotations
    @inject Data.DbContext Db
    @inject NavigationManager Nav
    @using Microsoft.EntityFrameworkCore;
    
    <h3>Добавить товар</h3>
    
    <EditForm Model="@product" OnValidSubmit="@Save" FormName="AddProductForm">
        <DataAnnotationsValidator />
        <ValidationSummary />
    
        <div class="mb-3">
            <label>Название товара:</label>
            <InputText @bind-Value="product.NameProduct" class="form-control" />
        </div>
    
        <div class="mb-3">
            <label>Цена:</label>
            <InputNumber @bind-Value="product.Price" class="form-control" />
        </div>
    
        <div class="mb-3">
            <label>Категория:</label>
            <InputSelect @bind-Value="selectedCategoryId" class="form-control">
                <option value="0">-- выберите категорию --</option>
                @foreach (var cat in categories)
                {
                    <option value="@cat.CategoryId">@cat.NameCategories</option>
                }
            </InputSelect>
        </div>
    
        <div class="mb-3">
            <label>Или введите новую категорию:</label>
            <InputText @bind-Value="newCategoryName" class="form-control" />
        </div>
    
        <div class="form-check mb-3">
            <InputCheckbox @bind-Value="product.IsHidden" class="form-check-input" />
            <label class="form-check-label">Скрыть</label>
        </div>
    
        <button type="submit" class="btn btn-success">Сохранить</button>
        <button type="button" class="btn btn-secondary" @onclick="Cancel">Отмена</button>
    </EditForm>
    
    @code {
        Product product = new();
        List<Category> categories = new();
        int selectedCategoryId = 0;
        string newCategoryName = string.Empty;
    
        protected override void OnInitialized()
        {
            categories = Db.Categories.ToList();
        }
    
        async Task Save()
        {
            // Выбор между существующей и новой категорией
            if (!string.IsNullOrWhiteSpace(newCategoryName))
            {
                var newCategory = new Category { NameCategories = newCategoryName };
                Db.Categories.Add(newCategory);
                await Db.SaveChangesAsync(); // обязательно сохранить, чтобы получить CategoryId
                product.CategoryId = newCategory.CategoryId;
            }
            else if (selectedCategoryId > 0)
            {
                product.CategoryId = selectedCategoryId;
            }
            else
            {
                // Ни категория, ни имя — ошибка
                return;
            }
    
            Db.Products.Add(product);
            await Db.SaveChangesAsync();
            Nav.NavigateTo("/products");
        }
    
        void Cancel()
        {
            Nav.NavigateTo("/products");
        }
    }

Класс DbContext.cs:

using System;
using System.Collections.Generic;
using Data.Models;
using Microsoft.EntityFrameworkCore;

namespace Data;

public partial class DbContext : Microsoft.EntityFrameworkCore.DbContext
{
    public DbContext()
    {
    }

    public DbContext(DbContextOptions<DbContext> options)
        : base(options)
    {
    }

    public virtual DbSet<Category> Categories { get; set; } = null!;

    public virtual DbSet<Customer> Customers { get; set; }

    public virtual DbSet<Order> Orders { get; set; }

    public virtual DbSet<OrderItem> OrderItems { get; set; }

    public virtual DbSet<Product> Products { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Category>(entity =>
        {
            entity.HasKey(e => e.CategoryId).HasName("PK__Categori__19093A2BBD83C839");

            entity.Property(e => e.CategoryId).HasColumnName("CategoryID");
            entity.Property(e => e.NameCategories).HasMaxLength(30);
        });

        modelBuilder.Entity<Customer>(entity =>
        {
            entity.HasKey(e => e.CustomerId).HasName("PK__Customer__A4AE64B81DD23A65");

            entity.Property(e => e.CustomerId).HasColumnName("CustomerID");
            entity.Property(e => e.CustomerAddress).HasMaxLength(300);
            entity.Property(e => e.Email).HasMaxLength(50);
            entity.Property(e => e.FirstName).HasMaxLength(50);
            entity.Property(e => e.Phone).HasMaxLength(20);
        });

        modelBuilder.Entity<Order>(entity =>
        {
            entity.HasKey(e => e.OrderId).HasName("PK__Orders__C3905BAF557949B8");

            entity.Property(e => e.OrderId).HasColumnName("OrderID");
            entity.Property(e => e.CustomerId).HasColumnName("CustomerID");
            entity.Property(e => e.DeliveryAddress).HasMaxLength(300);
            entity.Property(e => e.OrderDate)
                .HasDefaultValueSql("(getdate())")
                .HasColumnType("datetime");

            entity.HasOne(d => d.Customer).WithMany(p => p.Orders)
                .HasForeignKey(d => d.CustomerId)
                .OnDelete(DeleteBehavior.ClientSetNull)
                .HasConstraintName("FK__Orders__Customer__47DBAE45");
        });

        modelBuilder.Entity<OrderItem>(entity =>
        {
            entity.HasKey(e => e.OrderItemId).HasName("PK__OrderIte__57ED06A124771180");

            entity.Property(e => e.OrderItemId).HasColumnName("OrderItemID");
            entity.Property(e => e.OrderId).HasColumnName("OrderID");
            entity.Property(e => e.ProductId).HasColumnName("ProductID");

            entity.HasOne(d => d.Order).WithMany(p => p.OrderItems)
                .HasForeignKey(d => d.OrderId)
                .OnDelete(DeleteBehavior.ClientSetNull)
                .HasConstraintName("FK__OrderItem__Order__4AB81AF0");

            entity.HasOne(d => d.Product).WithMany(p => p.OrderItems)
                .HasForeignKey(d => d.ProductId)
                .OnDelete(DeleteBehavior.ClientSetNull)
                .HasConstraintName("FK__OrderItem__Produ__4BAC3F29");
        });

        modelBuilder.Entity<Product>(entity =>
        {
            entity.HasKey(e => e.ProductId).HasName("PK__Products__B40CC6EDA0EA098D");

            entity.Property(e => e.ProductId).HasColumnName("ProductID");
            entity.Property(e => e.CategoryId).HasColumnName("CategoryID");
            entity.Property(e => e.NameProduct).HasMaxLength(50);
            entity.Property(e => e.Price).HasColumnType("decimal(10, 2)");

            entity.HasOne(d => d.Category).WithMany(p => p.Products)
                .HasForeignKey(d => d.CategoryId)
                .OnDelete(DeleteBehavior.ClientSetNull)
                .HasConstraintName("FK__Products__Catego__440B1D61");
        });

        OnModelCreatingPartial(modelBuilder);
    }

    partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
}

Класс модели Categories:

using System;
using System.Collections.Generic;

namespace Data.Models;

public partial class Category
{
    public int CategoryId { get; set; }

    public string NameCategories { get; set; } = null!;

    public virtual ICollection<Product> Products { get; set; } = new List<Product>();
}

А если написать вот такой код для проверки:

protected override void OnInitialized()
{
    if (!Db.Categories.Any())
    {
        Db.Categories.Add(new Category { NameCategories = "Тест" });
        Db.SaveChanges();
    }

    categories = Db.Categories.ToList();
}

То данные вставляются в базу данных. Почему?!


Ответы (0 шт):