Вы не можете иметь более одного PK, но вы можете иметь более одного уникального ограничения, а в SQL Server вы можете создать ограничение внешнего ключа, которое ссылается на уникальное ограничение (один или несколько столбцов).Вот пример двух таблиц, которые примерно похожи на вашу модель.
CREATE TABLE dbo.Vehicles
(
VehicleID INT PRIMARY KEY,
[Type] VARCHAR(5) NOT NULL UNIQUE,
CONSTRAINT u1 UNIQUE(VehicleID, [Type])
);
CREATE TABLE dbo.Cars
(
CarID INT PRIMARY KEY,
VehicleID INT NOT NULL
FOREIGN KEY REFERENCES dbo.Vehicles(VehicleID),
[Type] VARCHAR(5) NOT NULL
FOREIGN KEY REFERENCES dbo.Vehicles([Type]),
CONSTRAINT fk1 FOREIGN KEY (VehicleID, [Type])
REFERENCES dbo.Vehicles(VehicleID, [Type])
);
Обратите внимание, что у Cars есть три внешних ключа: один указывает на PK транспортных средств (VehicleID), один указывает на уникальное ограничение для транспортных средств ([Type]), а другой указывает на несколько столбцов.уникальное ограничение для транспортных средств (VehicleID, [Type]).Я понимаю, что это не эквивалентно тому, что вы пытаетесь сделать, но должно продемонстрировать, что SQL Server, по крайней мере, способен делать все, что вы, кажется, хотите сделать (мне трудно понять, что вы на самом деле, потому что выпродолжайте обмениваться понятиями между тем, что сделал Алекс, тем, что вы пытаетесь сделать, но терпите неудачу, и тем, что вы сделали успешно.Если это так, влияет ли это на ограничения, которые имеют более одного столбца, или на все уникальные ограничения?Если это так, то это позор, потому что это, безусловно, поддерживается в SQL Server.Похоже, это будет либо ошибка, либо преднамеренное упущение (учитывая, что стандарт строго не допускает использование FK против уникальных ограничений).Интересно, есть ли какие-либо сообщения об ошибках в Connect ?
Я не знаю, как заставить EF распознать это, но я знаю, что почти все люди, которых я знаю, используют базу данныхпроекты заканчивают выполнением модификаций до или после развертывания, и они могут быть относительно автоматизированы.