Добавление строки в реляционную таблицу - linq to sql - PullRequest
0 голосов
/ 03 июня 2011

У меня есть 3 основных таблицы - Picture, Album and Collage. Collage и Album могут иметь 1-много изображений. Снимки не обязательно должны быть в Album для добавления в Collage.

Чтобы определить их отношения, у меня есть AlbumPicture и CollagePicture таблицы.

Моя проблема возникает, когда я пытаюсь добавить уже загруженную картинку в Collage и, следовательно, в таблицу CollagePicture. Выдает ошибку нарушения первичного ключа на PK_Picture, поскольку изображение уже существует.

CollagePictures.InsertOnSubmit(new CollagePicture {Collage = CollagePicture = existingPic});

Мне нужно добавить одну запись в CollagePicture для существующей картинки и новую Collage. Можно ли как-нибудь сказать linq не добавлять изображение, если оно уже существует?

Я новичок в Linq и все еще учусь.

EDIT: извини, если мне было непонятно. Я назначаю PK для Picture как GUID при загрузке изображений. В CollagePicture у меня уже есть эта картинка с другим коллажем

, например

CollagePictureId [PK]= 1
CollageId=1
PictureId = 1234567890123456

Теперь я хочу добавить одно и то же изображение с другим CollageId скажем, 2. Когда я пытаюсь добавить что-либо в CollagePicture, он пытается добавить и в таблицу Picture. и тогда я получу исключение. Надеюсь, это прояснит ситуацию.

Ответы [ 4 ]

1 голос
/ 04 июля 2011

Я наконец заставил это работать ..

Вместо этого

CollagePictures.InsertOnSubmit(new CollagePicture {Collage = Collage, CollagePicture = existingPic});

Это должно быть

CollagePictures.InsertOnSubmit(new CollagePicture {Collage = collage, CollagePicture.PictureId = existingPic.PictureId});

Когда вы добавляете объект в объект реляционной таблицыон также добавляет объект в первичную таблицу.так что простая ссылка на Id гарантирует, что он ничего не делает с основной таблицей.

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

0 голосов
/ 03 июня 2011

Без подробного представления вашей модели данных очень сложно сделать предположение.

Если вы правильно настроили свои отношения и LINQ to SQL, вы можете сделать что-то вроде следующего:

collage.Add(Picture);

Таким образом, LINQ to SQL добавит правильные строки в таблицы.

Чтобы проверить, существует ли изображение в Коллаже, вы должны сделать что-то вроде этого.

collage.Pictures.Where(p => p.ID == pictureID).Count() > 0
0 голосов
/ 03 июня 2011

Если PK existingPic равен 0 (при условии типа int), то он новый, иначе он уже существует.

if(existingPic.pkColumnId == 0)
  CollagePictures.InsertOnSubmit(existingPic);
0 голосов
/ 03 июня 2011

Какой первичный ключ у вас есть в таблице CollagePicture?Не совсем понятно, что вы хотите делать, вставляя новую запись в CollagePicture.Вы хотите добавить существующую картинку в существующий коллаж?Если это так, ваш первичный ключ должен быть (PictureId, CollageId)

...