Я столкнулся со сценарием, в котором 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 Я получаю модель с двумя классами, Пользователь
и Группа
, Пользователь
, имеющий свойство навигации, называемое Группа
. Это все хорошо.
Теперь, скажем, вместо этого индекс выглядел так:
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]
То есть, единственное, что я сделал , , сделал индекс уникальным. После этого, когда я говорю разработчику Visual Studio сгенерировать Entity Model, связь между пользователями и группами не отображается, и у пользователя
нет свойств навигации. Изучение сгенерированного файла EDMX показывает, что в модели хранилища вообще отсутствует AssociationSet.
Кто-нибудь может объяснить, почему это так? Почему уникальный индекс не позволяет EF моделировать отношения?
Спасибо.
Уникальный индекс допускает 1 значение NULL, первичный ключ не допускает NULLS . Как вы будете соответствовать NULL, если ничто не равно NULL, ни даже другое NULL