【问题标题】:Entity Framework not making association and displays junction tables实体框架不进行关联并显示联结表
【发布时间】:2016-02-25 20:16:22
【问题描述】:

我们正在尝试使用数据库优先实体框架设置一个新的数据库和应用程序。

除了这一堆桌子外,一切都运行良好。 实体框架未设置关联,而是在 3 个实例中的 2 个中显示联结表。

在图片中,ProfileIntegrationToolkit 和 ProfileProviderPrimary 应该消失并且应该是关联。

这是重现表格的代码

/****** Object:  Table [dbo].[AuthorizedType]    Script Date: 25/02/2016 3:04:42 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[AuthorizedType](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [NameEng] [nvarchar](250) NOT NULL,
    [NameFra] [nvarchar](250) NOT NULL,
    [DescriptionEng] [nvarchar](max) NULL,
    [DescriptionFra] [nvarchar](max) NULL,
 CONSTRAINT [PK_AuthorizedToOperateTypes] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO
/****** Object:  Table [dbo].[IntegrationToolkit]    Script Date: 25/02/2016 3:04:42 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[IntegrationToolkit](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [NameEng] [nvarchar](250) NOT NULL,
    [NameFra] [nvarchar](250) NOT NULL,
    [DescriptionEng] [nvarchar](max) NULL,
    [DescriptionFra] [nvarchar](max) NULL,
 CONSTRAINT [PK_IntegrationToolkits] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO
/****** Object:  Table [dbo].[Profile]    Script Date: 25/02/2016 3:04:42 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Profile](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [AuthorizedToOperateTypeId] [int] NOT NULL,
    [AuthorizationDate] [datetime2](7) NOT NULL,
    [ProviderPrimaryId] [int] NOT NULL,
    [ProviderSecondaryId] [int] NOT NULL,
    [IntegrationToolkitId] [int] NOT NULL,
 CONSTRAINT [PK_CyberSecurityProfile] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
/****** Object:  Table [dbo].[ProfileIntegrationToolKit]    Script Date: 25/02/2016 3:04:42 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[ProfileIntegrationToolKit](
    [ProfileId] [int] NOT NULL,
    [IntegrationToolkitId] [int] NOT NULL,
 CONSTRAINT [PK_CyberSecurityProfileIntegrationToolKitOther] PRIMARY KEY CLUSTERED 
(
    [ProfileId] ASC,
    [IntegrationToolkitId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
/****** Object:  Table [dbo].[ProfileProviderPrimary]    Script Date: 25/02/2016 3:04:42 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[ProfileProviderPrimary](
    [ProfileId] [int] NOT NULL,
    [ProviderId] [int] NOT NULL,
 CONSTRAINT [PK_CyberSecurityProfileCredentialProviderPrimary] PRIMARY KEY CLUSTERED 
(
    [ProfileId] ASC,
    [ProviderId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
/****** Object:  Table [dbo].[ProfileProviderSecondary]    Script Date: 25/02/2016 3:04:42 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[ProfileProviderSecondary](
    [ProfileId] [int] NOT NULL,
    [ProviderId] [int] NOT NULL,
 CONSTRAINT [PK_CyberSecurityProfileCredentialProviderSecondary] PRIMARY KEY CLUSTERED 
(
    [ProfileId] ASC,
    [ProviderId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
/****** Object:  Table [dbo].[Provider]    Script Date: 25/02/2016 3:04:42 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Provider](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [NameEng] [nvarchar](250) NOT NULL,
    [NameFra] [nvarchar](250) NOT NULL,
    [DescriptionEng] [nvarchar](max) NULL,
    [DescriptionFra] [nvarchar](max) NULL,
    [ParentId] [int] NULL,
 CONSTRAINT [PK_CredentialProviders] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO
ALTER TABLE [dbo].[Profile]  WITH CHECK ADD  CONSTRAINT [FK_AuthorizedToOperate] FOREIGN KEY([AuthorizedToOperateTypeId])
REFERENCES [dbo].[AuthorizedType] ([Id])
GO
ALTER TABLE [dbo].[Profile] CHECK CONSTRAINT [FK_AuthorizedToOperate]
GO
ALTER TABLE [dbo].[Profile]  WITH CHECK ADD  CONSTRAINT [FK_ProvidersPrimary] FOREIGN KEY([ProviderPrimaryId])
REFERENCES [dbo].[Provider] ([Id])
GO
ALTER TABLE [dbo].[Profile] CHECK CONSTRAINT [FK_ProvidersPrimary]
GO
ALTER TABLE [dbo].[Profile]  WITH CHECK ADD  CONSTRAINT [FK_ProvidersSecondary] FOREIGN KEY([ProviderSecondaryId])
REFERENCES [dbo].[Provider] ([Id])
GO
ALTER TABLE [dbo].[Profile] CHECK CONSTRAINT [FK_ProvidersSecondary]
GO
ALTER TABLE [dbo].[Profile]  WITH CHECK ADD  CONSTRAINT [FK_Profile_IntegrationToolkit] FOREIGN KEY([IntegrationToolkitId])
REFERENCES [dbo].[IntegrationToolkit] ([Id])
GO
ALTER TABLE [dbo].[Profile] CHECK CONSTRAINT [FK_Profile_IntegrationToolkit]
GO
ALTER TABLE [dbo].[ProfileIntegrationToolKit]  WITH CHECK ADD  CONSTRAINT [FK_ProfileIntegrationToolKit_Profile] FOREIGN KEY([ProfileId])
REFERENCES [dbo].[Profile] ([Id])
GO
ALTER TABLE [dbo].[ProfileIntegrationToolKit] CHECK CONSTRAINT [FK_ProfileIntegrationToolKit_Profile]
GO
ALTER TABLE [dbo].[ProfileIntegrationToolKit]  WITH CHECK ADD  CONSTRAINT [FK_ProfileIntegrationToolKit_IntegrationToolkit] FOREIGN KEY([ProfileId])
REFERENCES [dbo].[IntegrationToolkit] ([Id])
GO
ALTER TABLE [dbo].[ProfileIntegrationToolKit] CHECK CONSTRAINT [FK_ProfileIntegrationToolKit_IntegrationToolkit]
GO
ALTER TABLE [dbo].[ProfileProviderPrimary]  WITH CHECK ADD  CONSTRAINT [FK_ProfileProviderPrimary_Provider] FOREIGN KEY([ProfileId])
REFERENCES [dbo].[Provider] ([Id])
GO
ALTER TABLE [dbo].[ProfileProviderPrimary] CHECK CONSTRAINT [FK_ProfileProviderPrimary_Provider]
GO
ALTER TABLE [dbo].[ProfileProviderPrimary]  WITH CHECK ADD  CONSTRAINT [FK_ProfileProviderPrimary_Profile] FOREIGN KEY([ProfileId])
REFERENCES [dbo].[Profile] ([Id])
GO
ALTER TABLE [dbo].[ProfileProviderPrimary] CHECK CONSTRAINT [FK_ProfileProviderPrimary_Profile]
GO
ALTER TABLE [dbo].[ProfileProviderSecondary]  WITH CHECK ADD  CONSTRAINT [FK_ProfileProviderSecondary_Provider] FOREIGN KEY([ProviderId])
REFERENCES [dbo].[Provider] ([Id])
GO
ALTER TABLE [dbo].[ProfileProviderSecondary] CHECK CONSTRAINT [FK_ProfileProviderSecondary_Provider]
GO
ALTER TABLE [dbo].[ProfileProviderSecondary]  WITH CHECK ADD  CONSTRAINT [FK_ProfileProviderSecondary_Profile] FOREIGN KEY([ProfileId])
REFERENCES [dbo].[Profile] ([Id])
GO
ALTER TABLE [dbo].[ProfileProviderSecondary] CHECK CONSTRAINT [FK_ProfileProviderSecondary_Profile]
GO

我做错了吗? 我尝试在 SSMS 中重新创建约束,但结果相同。


编辑 1- 如果我尝试减少我导入的表的数量。我遇到了类似的问题。

【问题讨论】:

    标签: c# database entity-framework database-design


    【解决方案1】:

    这是一个鬼鬼祟祟的!请参阅 DDL 的这一部分:

    ALTER TABLE [dbo].[ProfileProviderPrimary]  WITH CHECK
    ADD  CONSTRAINT [FK_ProfileProviderPrimary_Provider]
    
        FOREIGN KEY([ProfileId])
    
    REFERENCES [dbo].[Provider] ([Id])
    

    我缩进了错误的行。 Provider 的外键应该关闭 ProviderId,就像在 ProfileProviderSecondary 中一样。 ProfileIntegrationToolKit也出现同样的错误。

    更正此问题,从 edmx 中删除连接,从数据库中更新模型,然后就可以开始了。

    【讨论】:

    • 谢谢。我会在早上试一试。嗯,我得看看为什么在 SSMS 的图表模式下创建外键关系时会发生这种情况(这样就不会再次发生)
    • 工作就像一个魅力。我想我在创建外键关系时没有注意 SSMS 的图表模式。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多