Код: Выделить всё
-- Create Tigger to not throw in case of duplicate mapping attempt
CREATE TRIGGER dbo.BlockDuplicates_Product_Category_Mapping
ON dbo.Product_Category_Mapping
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON;
IF NOT EXISTS (SELECT 1 FROM inserted AS i
INNER JOIN dbo.Product_Category_Mapping AS p
ON i.ProductId = p.ProductId
AND i.CategoryId = p.CategoryId
)
BEGIN
INSERT dbo.Product_Category_Mapping(ProductId, CategoryId, IsFeaturedProduct, DisplayOrder)
SELECT ProductId, CategoryId, IsFeaturedProduct, DisplayOrder FROM inserted;
END
ELSE
BEGIN
PRINT 'Duplicate';
END
END
[img]https: //i.stack.imgur.com/mMPy6.png[/img]
Но если я использую его в коде с EF:
Код: Выделить всё
Microsoft.EntityFrameworkCore.Relational: произошла ошибка при обновлении записей. Подробности смотрите во внутреннем исключении. Основной поставщик данных Microsoft SqlClient: нарушение ограничения UNIQUE KEY «UQ_PCM_ProductId_CategoryId». Невозможно вставить дубликат ключа в объект «dbo.Product_Category_Mapping». Повторяющееся значение ключа: (920, 129).
Это значение вставляется через свойство навигации, если это имеет какое-либо значение.< /p>
Может ли кто-нибудь указать мне, почему это не работает?
Я ответил на эти два связанных вопроса, но не вижу ничего, что могло бы помочь:
Триггер вставки SQL Server 2008 не срабатывает
SQL Server 2008 — триггер вставки не срабатывает
Подробнее здесь: https://stackoverflow.com/questions/781 ... g-using-ef