2010-06-04 94 views
1

我从来没有明白为什么的EntityFramework的关联看他们在映射详细信息窗口的方式做。关联映射细节混淆?

当我选择了一个协会2个表之间的线,例如FK_ApplicationSectionsNodes_FormItems,它显示了这一点:

Association 
    Maps to ApplicationSectionNodes 
    FormItems 
     (key symbol) FormItemId:Int32  <-->  FormItemId:int 
    ApplicationSectionNodes 
     (key symbol) NodeId:Int32   <-->  (key symbol) NodeId : int 

还好,这一次是为我自动创建一个基于我的数据库中的外键约束,但每当没有约束存在时,我就很难手动创建关联(当数据库没有图表设置时),因为我不了解关联的映射细节。

FormItems表中有一个主键标识列FormItemId和ApplicationSectionNodes包含FormItemId列是外键,并NODEID作为主键标识列。

对我来说真正没有意义的是为什么当NodeId与外键关系没有任何关系时,关联有什么关于NodeId的列表?(它更容易混淆自我引用关系,但如果我能理解上述情况,我会有更好的处理方式)。

CREATE TABLE [dbo].[ApplicationSectionNodes](
    [NodeID] [int] IDENTITY(1,1) NOT NULL, 
    [OutlineText] [varchar](5000) NULL, 
    [ParentNodeID] [int] NULL, 
    [FormItemId] [int] NULL, 
CONSTRAINT [PK_ApplicationSectionNodes] PRIMARY KEY CLUSTERED 
(
    [NodeID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY], 
CONSTRAINT [UQ_ApplicationSectionNodesFormItemId] UNIQUE NONCLUSTERED 
(
    [FormItemId] 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 

ALTER TABLE [dbo].[ApplicationSectionNodes] WITH NOCHECK ADD CONSTRAINT [FK_ApplicationSectionNodes_ApplicationSectionNodes] FOREIGN KEY([ParentNodeID]) 
REFERENCES [dbo].[ApplicationSectionNodes] ([NodeID]) 
GO 
ALTER TABLE [dbo].[ApplicationSectionNodes] NOCHECK CONSTRAINT [FK_ApplicationSectionNodes_ApplicationSectionNodes] 
GO 
ALTER TABLE [dbo].[ApplicationSectionNodes] WITH NOCHECK ADD CONSTRAINT [FK_ApplicationSectionNodes_FormItems] FOREIGN KEY([FormItemId]) 
REFERENCES [dbo].[FormItems] ([FormItemId]) 
GO 
ALTER TABLE [dbo].[ApplicationSectionNodes] NOCHECK CONSTRAINT [FK_ApplicationSectionNodes_FormItems] 
GO 

FormItems表:

CREATE TABLE [dbo].[FormItems](
    [FormItemId] [int] IDENTITY(1,1) NOT NULL, 
    [FormItemType] [int] NULL, 
CONSTRAINT [PK_FormItems] PRIMARY KEY CLUSTERED 
(
    [FormItemId] 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 
ALTER TABLE [dbo].[FormItems] WITH NOCHECK ADD CONSTRAINT [FK_FormItems_FormItemTypes] FOREIGN KEY([FormItemType]) 
REFERENCES [dbo].[FormItemTypes] ([FormItemTypeId]) 
GO 
ALTER TABLE [dbo].[FormItems] NOCHECK CONSTRAINT [FK_FormItems_FormItemTypes] 
GO 

回答

0

这看起来不正确,你能添加在数据库中的实际外键定义无论从SSMS的外键编辑器对话框或从数据库脚本中的图像来自SSMS的这些表格。

EF不会在节点Id具有无规拉,如果它是不是在你的外键列。

检查数据库。

+0

我添加显示外键创建表的语句。在其他表关系中,尽管外键关键字不是外键约束的一部分,但似乎总是出现外键表的主键出现在关联中的情况。 – AaronLS 2010-06-07 14:16:08