私はこれらの3つのクラスがあります。Entity Frameworkが冗長外部キーを作成するのはなぜですか?
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; }
}
Entity Frameworkのコード - 最初に実行しているとき、私はデータベース内にこのような何かを得ることを期待:
をしかし、私は得るかがあります
すなわちCREATで:がpidに+余分なFK上記E SCRIPTは、我々が得る:
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
しかし、我々はまた、この余分な/冗長FKます:FOREIGN KEYを紹介
:
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
全体を実行しているときに、このエラーが発生SCRIPTをCREATEを表 'UF'の制約 'FK_dbo.UF_dbo.P_PId'は、サイクルまたは複数のカスケード・パスを引き起こす可能性があります。 NO DELETE NO ACTIONまたはUP UP NO NO ACTIONを指定するか、他のFOREIGN KEY制約を変更してください。
メッセージレベル1750、レベル16、状態0、行926
制約またはインデックスを作成できませんでした。以前のエラーを参照してください。
質問はなぜですか?
作業ナビゲーションプロパティ 'E'と 'P'(私はあなたが実際に使用する名前ではないことを望みます)を追加した後、EF6でOKです。これはどのバージョンですか? –