Entity Framework не любит отношения от 0..1 до * - PullRequest
1 голос
/ 11 марта 2010

У меня есть база данных, где у меня есть две таблицы. Первая таблица имеет один столбец, который является идентификатором и первичным ключом. Вторая таблица содержит два столбца. Один является первичным ключом varchar, а другой - внешним ключом Nullable для первой таблицы.

При добавлении таблиц в модель я получаю следующую ошибку проверки:

Условие не может быть указано для члена столбца «DetailsControlSetId», так как он помечен «Computed» или «Identity» StoreGeneratedPattern.

где 'DetailsControlSetId' - это вторая ссылка на внешний ключ во второй таблице.

Шаги для воспроизведения:

1) Создайте новый проект профиля клиента .Net 3.5 с помощью Visual Studio 2010 RC.
2) Запустите приведенные ниже сценарии для тестовой базы данных (пустая база данных подойдет).
3) Создайте модель EDMX, ориентируясь на созданную базу данных, но не импортируйте таблицы.
4) Обновить модель из базы данных, выбрав две таблицы в базе данных (DetailsControlSet и Application).
5) Подтвердите модель EDMX.

Сценарии создания таблицы:

CREATE TABLE [dbo].[DetailsControlSet](
    [DetailsControlSetId] [int] IDENTITY(1,1) NOT NULL,
    CONSTRAINT [PK_DetailsControlSet] PRIMARY KEY CLUSTERED 
    (
        [DetailsControlSetId] ASC
    )
)

GO

CREATE TABLE [dbo].[Application](
    [ApplicationName] [varchar](50) NOT NULL,
    [DetailsControlSetId] [int] NULL,
    CONSTRAINT [PK_Application] PRIMARY KEY CLUSTERED 
    (
        [ApplicationName] ASC
    )
)

GO

ALTER TABLE [dbo].[Application]  WITH CHECK ADD  CONSTRAINT [FK_Application_DetailsControlSet] FOREIGN KEY([DetailsControlSetId])
REFERENCES [dbo].[DetailsControlSet] ([DetailsControlSetId])
ON UPDATE CASCADE
ON DELETE CASCADE
GO

ALTER TABLE [dbo].[Application] CHECK CONSTRAINT [FK_Application_DetailsControlSet]
GO

Ответы [ 2 ]

2 голосов
/ 12 марта 2010

Обновление Теперь, когда вы (наконец-то!) Опубликовали шаги, чтобы воспроизвести это, я могу допустить ошибку на моей машине. И различие EDMX моделей «импортируй все сначала» от моделей «импортируй таблицы позже» делает проблему очевидной. «Рабочая» модель имеет следующую строку:

<Property Name="DetailsControlSetId" Type="int" />

Модель "ошибка" имеет следующую строку:

<Property Name="DetailsControlSetId" Type="int" StoreGeneratedPattern="Identity" />

Это единственное существенное различие между двумя моделями.

Итак, чтобы это исправить:

  1. Щелкните правой кнопкой мыши EDMX в обозревателе решений.
  2. Открыть в редакторе XML.
  3. Удалить StoreGeneratedPattern="Identity"
  4. Обратите внимание, что ошибка немедленно исчезает.

Имея этот контрольный пример, я смог провести некоторое исследование. Оказывается это известная ошибка в бета-версии VS 2010, которая была исправлена ​​несколько дней назад .

0 голосов
/ 11 марта 2010

Эта статья может помочь, была размещена на ADO.NET official блог команды

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...