Ich habe diese drei Klassen:Warum erstellt Entity Framework einen redundanten Fremdschlüssel?
public class P
{
[Key]
[Column(Order = 0)]
[Required]
public string PId { get; set; }
}
public class E
{
[Key]
[ForeignKey("P")]
[Column(Order = 0)]
[Required]
public string PId { get; set; }
[Key]
[Column(Order = 1)]
[Required]
public string EId { get; set;
}
public class UF
{
[Key]
[Required]
public string Id { get; set; }
[ForeignKey("E")]
[Column(Order = 0)]
public string PId { get; set; }
[ForeignKey("E")]
[Column(Order = 1)]
public string EId { get; set; }
}
Beim Ausführen von Entity Framework Code-first, ich erwarte, dass in der Datenbank, so etwas zu bekommen:
Aber was ich tue, ist die oben + extra FK PId:
dh in CREAT E SCRIPT erhalten wir:
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_dbo.UF_dbo.E_PId_EId]') AND parent_object_id = OBJECT_ID(N'[dbo].[UF]'))
ALTER TABLE [dbo].[UF] WITH CHECK
ADD CONSTRAINT [FK_dbo.UF_dbo.E_PId_EId]
FOREIGN KEY([PId], [EId]) REFERENCES [dbo].[E] ([PId], [EId])
ON DELETE CASCADE
GO
Aber wir bekommen auch diese zusätzliche redundant/FK:
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_dbo.UF_dbo.P_PId]') AND parent_object_id = OBJECT_ID(N'[dbo].[UF]'))
ALTER TABLE [dbo].[UF] WITH CHECK
ADD CONSTRAINT [FK_dbo.UF_dbo.P_PId]
FOREIGN KEY([PId]) REFERENCES [dbo].[P] ([PId])
ON DELETE CASCADE
GO
die in diesem Fehler führt, wenn die gesamte CREATE SCRIPT ausgeführt wird:
Einführung FOREIGN KEY Die Einschränkung 'FK_dbo.UF_dbo.P_PId' in der Tabelle 'UF' kann Zyklen oder mehrere Kaskadenpfade verursachen. Geben Sie ON DELETE NO ACTION oder ON UPDATE NO ACTION an, oder ändern Sie andere FOREIGN KEY-Einschränkungen.
Msg 1750, Ebene 16, Status 0, Zeile 926
Constraint oder Index konnte nicht erstellt werden. Siehe vorherige Fehler.
Die Frage ist warum?
Works OK mit EF6 nach dem Hinzufügen der Navigationseigenschaften 'E' und' P' (die ich hoffe, sind keine Namen, die Sie wirklich verwenden werden). Welche Version ist das? –