linq to sql datacontext, вставка объектов и получение идентификатора и добавление его в другую таблицу? - PullRequest
0 голосов
/ 23 октября 2010

Заголовок странного вопроса ...

То, что я пытаюсь выполнить, довольно просто, я думаю.

Я получил 3 таблицы в базе данных,

BlogPost - BlogPostTagsConnection - Теги

Блог-пост содержит текст, заголовок, фрагмент, автора, идентификатор и т. Д. BlogPostTagsConnection содержит идентификатор BlogPost и теги IDи, наконец, теги содержат tagid и tag.

Итак, я попытался выяснить, как вставить новую запись (и, в конце концов, обновить ее):

public void Create(BlogPost post)
{
  DB db = new DB();
  var matchingTags = from data in db.Tags
                               where (from tagsInPost in post.Tags select tagsInPost.TagName).Contains(data.Tag)
                               select new Tag() {TagId = data.TagID, TagName = data.Tag};

  var post2 = new DataBlogPost
                            {
                                Title = post.Title,
                                Text = post.Text,
                                Slug = post.Slug,
                                ShortDescription = post.ShortDescription,
                                Published = post.Published,
                                Author = post.Author
                            };
  db.DataBlogPosts.InsertOnSubmit(post2);
  ... <- insert the tags and retrieve the id from the tags and the blogpost
  ... <- insert the ids from the tags and blogposts to the blogpoststagsconnection table
  db.SubmitChanges();
}

Сначала я получаю всетеги из базы данных, которые соответствуют тегам, которые я написал в моем блоге.Теги сохраняются в списке с тегами {TagID, Tag}.

Во-вторых, я вставляю свой новый пост в базу данных (post2).

После этого мне нужно вставить все теги (который я создал с помощью своего поста), поэтому, если я написал это в текстовом поле тегов «tag1 tag2 tag3 tag4», а моя база данных уже содержит tag1 и tag2, он должен создать 2 новые записи, одну для tag3 и одну для tag4.

Затем мне нужно как-то получить идентификатор из сгенерированного поста блога, а также идентификатор из тегов tag3 и tag4, чтобы можно было вставить их в BlogPostTagsConnection.

Но как мне вернуть идентификатор обратно?или есть более простой способ обработки этих вставок?

Ответы [ 2 ]

2 голосов
/ 23 октября 2010

Да, если ваши отношения FK правильно установлены и таблицы должным образом импортированы на вашу поверхность DBML, у вашего DataBlogPost будет свойство BlogPostTagsConnections (или подобное), которое вы можете заполнить новым (или существующим, извлеченным из тот же DataContext) BlogPostTagsConnection экземпляров.

Аналогично BlogPostTagsConnection будет иметь свойство Tags, которое вы можете заполнить.

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

1 голос
/ 24 октября 2010

spender is right,

и некоторая дополнительная информация о том, как извлечь идентификатор вставленной сущности:

После вставки сущности, просто прочитайте свойство ID этой сущности, этовыполнено.

...