Я столкнулся со сценарием, в котором Entity Framework 4.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]
Если я скажу конструктору в Visual Studio 2010 сгенерировать модель данных сущности ADO.NET, я получу модель с двумя классами User
и Group
, 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]
То есть, only , что я сделал, - сделал индекс уникальным. После этого, когда я скажу разработчику Visual Studio сгенерировать Entity Model, связь между пользователями и группами не будет отображаться, а User
не будет иметь свойств навигации. Проверка сгенерированного файла EDMX показывает, что в модели хранения вообще отсутствует AssociationSet.
Может кто-нибудь объяснить, почему это так? Почему уникальный индекс не позволяет EF моделировать отношения?
Спасибо.