В текстовом тексте данных вставляются значения, недоступные в текстовом тексте до момента отправки изменений? - PullRequest
0 голосов
/ 18 марта 2009

Я просматриваю XML-файл статей и журналистов, которые их написали. Когда мы добавляем статьи в _Data наш datacontext, мы можем встретить журналиста, который нуждается в добавлении, поэтому мы делаем это:

newJourno = New journalist With {.name = strJournalist}
_Data.journalists.InsertOnSubmit(newJourno)
.articles_journalists.Add(New articles_journalist With {.id_journalist = newJourno.id,         .id_article = .id})

Однако впоследствии мы можем снова встретиться с этим же журналистом, и при этом мы ничего не вернем:

Dim journo = _Data.journalists.Where(Function(s) s.name = strJournalist).SingleOrDefault

Таким образом, он снова использует приведенный выше код для повторной вставки того же журналиста.

После того, как все наши вкладыши сделаны, мы отправляем изменения. На данный момент он имеет форму головы:

Оператор INSERT противоречит ограничению COLUMN FOREIGN KEY 'FK_articles_journalists_journalists'. Конфликт произошел в базе данных «бла», таблице «журналисты», столбце «id». Заявление было прекращено.

Просматривая SQL, созданный в SQL Server Profiler, вы можете увидеть, что он пытается добавить некоторых журналистов более одного раза, но это не удастся, так как имя должно отличаться. Последующие записи, которые пытаются вставить с этими журналистами, терпят неудачу, поскольку журналист не обновлялся.

Конечно, если у меня есть коллекция журналистов, добавьте в нее некоторых, а затем посмотрите в моей коллекции, я должен увидеть их всех, а не только оригиналов. Я могу выдумать это, я полагаю, отправляя изменения, но это кажется немного глупым.

Заранее спасибо,

Дэйв.

Ответы [ 3 ]

2 голосов
/ 18 марта 2009

Если вы хотите добавить две дочерние родительские строки в базу данных, вы должны назначить объект, а не столбец Id, идентификатор будет создан автоматически и будет доступен только после отправки изменений.

Вы должны сделать объект articles_journalist, а затем назначить сущность newJourno этому:

articles_journalist.journalist = newJourno;
0 голосов
/ 19 марта 2009

"имя должно отличаться."

Это серьезный недостаток дизайна. Личные имена никогда не бывают уникальными.

0 голосов
/ 19 марта 2009

CMS прав в том, что нужно назначать объект, а не идентификатор.

Однако, похоже, это не обходит проблему с тем, что текст данных не осознает, что в него добавлены новые материалы, пока вы не отправите изменения. Я могу только предположить, что это сделано специально, и поэтому я сейчас вызываю submitchanges, как и когда код вставляет объекты, которые мы потом ищем.

...