Удаление записи из М-М таблицы EF Core

Есть две сущности: Product, Category. Они связанные друг с другом как многие-к-многим по линковоной таблице ProductCategory. У данной, промежуточной таблицы есть два поля ProductID, CategoryID.

Изначально у ProductCategory были эти два поля ProductID и CategoryID как внешние и праймари ключи. НО! Была проблема, что при удалении из этой таблице либо ID продукта, или же категории - удаление происходило каскадно(удалялся везде этот итем). Тогда было решено изменить OnDeleteBehavior с Cascade на SetNull.

И для того что бы SetNull "проработал", я в миграции удалил что ProductID, CategoryID это первичные ключи и так же указал, что внешние ключи могут быть null.

И теперь таблица выглядит таким образов, что есть только два атрибута, которые выступают как внешние ключи на первичные ключи соответствующей таблицы, и кортежи не имеют никаких "уникальностей"(имею ввиду pk).

Проблема заключается, что при удалении из таблицы кортежа какого-то внешенего ключа, вместо него становится null. А если в самом кортеже удалить и категорию, и продукт - получится что в записи таблицы будет null - null => бесполезная запись.

Как можно решить данную проблему?

    migrationBuilder.CreateTable(
                name: "ProductCategories",
                columns: table => new
                {
                    ProductId = table.Column<int>(type: "int", nullable: true),
                    CategoryId = table.Column<int>(type: "int", nullable: true)
                },
                constraints: table =>
                {
                    table.ForeignKey(
                        name: "FK_ProductCategories_Categories_CategoryId",
                        column: x => x.CategoryId,
                        principalTable: "Categories",
                        principalColumn: "Id",
                        onDelete: ReferentialAction.SetNull);
                    table.ForeignKey(
                        name: "FK_ProductCategories_Products_ProductId",
                        column: x => x.ProductId,
                        principalTable: "Products",
                        principalColumn: "Id",
                        onDelete: ReferentialAction.SetNull);
                });

     migrationBuilder.CreateTable(
                name: "Categories",
                columns: table => new
                {
                    Id = table.Column<int>(type: "int", nullable: false)
                        .Annotation("SqlServer:Identity", "1, 1"),
                    Label = table.Column<string>(type: "nvarchar(20)", maxLength: 20, nullable: false),
                    Thumbnail = table.Column<string>(type: "nvarchar(250)", maxLength: 250, nullable: false)
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_Categories", x => x.Id);
                });

            migrationBuilder.CreateTable(
                name: "Products",
                columns: table => new
                {
                    Id = table.Column<int>(type: "int", nullable: false)
                        .Annotation("SqlServer:Identity", "1, 1"),
                    Label = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: false),
                    Price = table.Column<decimal>(type: "decimal(18,2)", precision: 18, scale: 2, nullable: false),
                    Description = table.Column<string>(type: "nvarchar(30)", maxLength: 30, nullable: false),
                    Thumbnail = table.Column<string>(type: "nvarchar(250)", maxLength: 250, nullable: false)
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_Products", x => x.Id);
                });

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