To zapytanie, kiedy uruchamiane na ADO.NET z MissingSchemaAction.AddWithKey
rzuca wyjątek:ADO.net SQL Server 2012 - Zapytanie z kluczem kompozytowego i MissingSchemaAction.AddWithKey nieprawidłowo dodaje ograniczenie
Nie udało się włączyć ograniczenia. Jeden lub więcej wierszy zawiera wartości naruszające ograniczenia inne niż zero, unikalne lub klucze obce.
zapytania:
SELECT map.GroupId, b.PersonId
FROM [GroupPersonMap] as map
INNER JOIN [Person] AS b ON b.PersonId = map.PersonId
GROUP BY map.GroupId, b.PersonId
Kontrola miejscowi ujawnia, że ograniczenie przez unikalność dla PersonId
został dodany. Co więcej, uruchamianie tego samego zapytania w SQL Server Manager zwraca zestaw wyników bez ostrzeżeń i błędów. Ten dokładny kod był używany do pracy z SQL Server 2005. Używając SQL Server 2005, podczas uruchamiania tego zapytania na ADO.net, zapytanie tworzy poprawnie złożone wiązanie. Czy to jest problem z aktualizacją?
Na marginesie wiem, że ustawienie EnforceConstraints = false
zapewnia obejście tego problemu. Idealnie jednak, chciałbym rozwiązać ten problem w jego katalogu głównym.
Setup, aby odtworzyć:
CREATE TABLE [GroupPersonMap]
(
[GroupId] [int] NOT NULL,
[PersonId] [int] NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE [GroupPersonMap] ADD CONSTRAINT [PK_GroupPersonMAP] PRIMARY KEY CLUSTERED ([GroupId], [PersonId])
CREATE TABLE [Person]
(
[PersonId] [int] NOT NULL IDENTITY(1, 1),
[Val] INT
) ON [PRIMARY]
GO
ALTER TABLE [Person] ADD CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED ([PersonId])
następnie wprowadzenie wartości:
INSERT INTO [GroupPersonMap]
SELECT 1, 1
UNION ALL
SELECT 2, 1
INSERT INTO [Person]
SELECT 1
W którym momencie pojawia się ten komunikat o błędzie? Po drugiej wstawce? – Codeman