Linq2Sql datacontext вход / выход из системы - PullRequest
2 голосов
/ 26 мая 2011

Я использую L2S, чтобы проверить, существует ли ключ, и если он не существует, создайте и вставьте его.Этот же DataContext также используется для выполнения других запросов в рамках того же метода C #.Я использую ключевое слово using для удаления DataContext после того, как с ним покончено.Я подключил sql profiler и увидел, что он войдет в систему, выполнит запрос и выйдет из системы.Кажется, это происходит, даже если тот же DataContext выполнит запрос или обновит позже.Я думал, что datacontext только вошел в систему и выполнил все запросы в течение этого одного сеанса?Имеет ли значение, как часто вы вызываете SubmitChanges ()?Или что мне не хватает?

макет того, что я вижу:

using(Datacontext)
{
      //Audit Login
      var b = DataContext.Table.FirstOrDefault(t=>t.Id == 4);
      //RPC: Completed
      //Audit Logout

       //Audit Login
       var x = DataContext.OtherTable.Any(t=>t.Id == 4);
       //RPC: Completed
      //Audit Logout

}

Обновление

sql Profiler показывает «продолжительность»эти выходы за пару сотен миллисекунд.Вот тогда мое приложение ждет, верно?

Ответы [ 3 ]

1 голос
/ 26 мая 2011

FirstOrDefault выполняет запрос, поскольку он должен вернуть вам результат, а не потенциальную коллекцию - то же самое относится и к Any.Когда вы создаете DataContext, он не сразу входит в систему.Уверяю вас, хотя это может выглядеть «плохо», все в порядке.

1 голос
/ 26 мая 2011

Текст данных L2S не сохраняет соединения, поэтому вы видите Вход / Выход из системы в профилировщике. Он сохраняет состояния, что важно для отслеживания изменений.

Вот хорошая статья для управления L2S DataContext: http://www.west -wind.com / weblog / posts / 2008 / Feb / 05 / Linq-to-SQL-DataContext-Lifetime-Management

1 голос
/ 26 мая 2011

В Linq-2-sql Any () и .FirstOrDefault (), называемые способом их использования, здесь не откладываются.Когда вы звоните им, они приведут к исполнению.Так что в этом случае они будут срабатывать немедленно, и это то, что вы также заметили в профилировщике.

См. Также: Как сохранить отложенное выполнение LINQ?

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...