Entity Framework - Вставка с внешним ключом - PullRequest
4 голосов
/ 12 апреля 2010

Извинения, если где-то есть четкий ответ. Но я не могу вставить в простую таблицу, потому что она содержит внешний ключ.

Таблица задач

TaskId (PK) Описание StatusId (FK)

В который я пытаюсь вставить вот так:

        Task t = new Task();
        t.Id = 1234;
        t.Title = "foo";
        t.Status = db.Status.ToList().First();

Но получите ошибку updateException: Отношение добавляется или удаляется из AssociationSet 'FK_Task_Status'. С ограничениями по количеству элементов, соответствующая «Задача» также должна быть добавлена ​​или удалена.

Как я могу вставить в эту таблицу?

Приветствия

....

Нашел мою проблему ....

Моя схема была неверной. Когда я создал свой внешний ключ, я указал на неправильное поле. Посмотрел в профилировщике SQL, увидел это:

ВЫБРАТЬ 1 AS [C1], [Extent1]. [Id] AS [Id], [Extent1]. [Descr] AS [Descr], [Extent2]. [Id] AS [Id1] ОТ [dbo]. [Status] AS [Extent1] ВЛЕВО НАРУЖНОЕ СОЕДИНЕНИЕ [dbo]. [Task] AS [Extent2] ON [Extent1]. [Id] = [Extent2]. [Id]

Что должно быть (присоединение к statusId, а не id):

ВЫБРАТЬ 1 AS [C1], [Extent1]. [Id] AS [Id], [Extent1]. [Descr] AS [Descr], [Extent2]. [Id] AS [Id1] ОТ [dbo]. [Status] AS [Extent1] LEFT OUTER JOIN [dbo]. [Task] AS [Extent2] ON [Extent1]. [Id] = [Extent2]. [StatusId]

Глупый я;)

Ответы [ 3 ]

2 голосов
/ 18 августа 2010

в .net Framework 4.0 U можно использовать простым способом:

 Task t = new Task();
    t.Id = 1234;
    t.Title = "foo";
    t.StatusId = 5678;

ссылка: http://blogs.msdn.com/b/adonet/archive/2009/11/06/foreign-key-relationships-in-the-entity-framework.aspx

0 голосов
/ 12 апреля 2010

вы можете попробовать

        Task t = new Task();
        t.Id = 1234;
        t.Title = "foo";
        t.Status.EntityKey = new EntityKey("tblStatus","StatusId",t.StatusID);

надеюсь, что это будет работать

0 голосов
/ 12 апреля 2010

Используя «Entity Framework 1.0» (версию, которая до сегодняшнего дня была самой последней), у вас есть правильная идея - получить Статус из базы данных, чтобы установить его для Задачи. Вы уверены, что на самом деле получаете объект Status с синтаксисом, который вы используете выше?

Пройдите по своему коду, чтобы убедиться, что ссылка на сущность Task установлена ​​на фактическую материализованную сущность Status.

...