我遇到过这样一个场景:EntityFramework4.0不会生成与由具有
索引,我想知道为什么。
基本设置如下:假设我在SQL Server 2008 R2中有两个表和一个外键关系:
CREATE TABLE [dbo].[User](
[Id] [int] IDENTITY(1,1) NOT NULL,
[GroupId] [int] NULL,
CONSTRAINT [PK_User] 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]
CREATE TABLE [dbo].[Group](
[Id] [int] IDENTITY(1,1) NOT NULL,
CONSTRAINT [PK_Group] 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]
ALTER TABLE [dbo].[User] WITH CHECK ADD CONSTRAINT [FK_User_Group]
FOREIGN KEY([GroupId])
REFERENCES [dbo].[Group] ([Id])
此外,假设存在以下索引:
CREATE NONCLUSTERED INDEX [IX_Group] ON [dbo].[Group]
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
如果我在VisualStudio2010中告诉设计师生成ADO.NET 实体数据模型我得到一个有两个类的模型,
User
Group
,
用户
组
现在,让我们假设索引是这样的:
CREATE UNIQUE NONCLUSTERED INDEX [IX_Group] ON [dbo].[Group]
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
也就是说
我所做的就是使索引成为唯一的索引。这样做之后,当我告诉visualstudio的设计者生成一个实体模型时,用户和组之间的关联并没有显示出来
用户
没有导航属性。检查生成的EDMX文件会发现存储模型根本没有关联。
有人能解释这是为什么吗?为什么唯一索引阻止EF对关系建模?
非常感谢。