Лучший способ проверить, существует ли элемент в sql server ce? - PullRequest
0 голосов
/ 15 марта 2012

Хорошо, поэтому я в основном пытаюсь определить, какой способ более эффективен при проверке наличия элементов в базе данных.

Я использую LINQ to SQL на WP7 с SQL Server CE.

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

Было два подхода, которые пришли на ум. Первый использовал foreach и проверял, существует ли объект в БД с таким же именем:

foreach(var item in items)
{
    //Make individual call to db for every item
    var possibleItem = /*SQL SERVER STATEMENT WITH WHERE CONDITION*/;
}

Выполнение отдельных вызовов в БД, хотя звучит довольно ресурсоемко. Поэтому другой идеей было сделать полный выбор всех объектов в БД и сохранить их в списке. И затем в значительной степени выполняют ту же концепцию с foreach, за исключением того, что теперь мне не нужно подключаться к БД, у меня есть прямой доступ к списку. Что вы думаете об этих подходах? Есть ли лучший способ?

1 Ответ

0 голосов
/ 15 марта 2012

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

using(var reader = cmd.ExecuteReader())
{
  while(reader.HasRows && reader.Read())
  {
    var id = reader.GetInt32(0);
    // test how id compares to the memory list
  }
}

Но если память не имеет значения, я бы просто для простоты считал все ключи из базы данных в память.

...