То, что вы пытаетесь сделать, очень сильно противоречит тому, как работает LinqToSql.
Использование долговечного DataContext очень сложно сделать правильно, особенно если вам нужно вызвать хранимые процедуры, где LinqToSql не может легко отслеживать изменения данных.
Изменения, внесенные в DataContext, обычно отслеживаются автоматически, поэтому DataContext может правильно управлять своим кешем и отслеживать изменения, внесенные в базу данных из этого DataContext. Однако это не всегда так. DataContext не (и не может легко) понять, что делает ваша хранимая процедура, поэтому он не знает, как правильно сохранить кеш. В этот момент, после вызова хранимой процедуры, ваш самый лучший вариант - избавиться от этого DataContext и создать новый. Это эффективно сдувает ваш кеш, который может или не может быть значительным поражением производительности, но целостность данных должна быть вашей главной задачей.
Если ваш Singleton DataContext не является единственной модификацией базы данных (например, ваша база данных может быть изменена такими типами: триггеры, пакетная обработка, другие приложения и т. Д.), Ваш DataContext может также содержать неточные данные в его кеш, который является еще одной причиной для краткосрочного DataContext.
Таким образом, хотя вы, возможно, преуспеете в долговременном синглтонном DataContext, вы будете бороться с системой по всему пути, и система, скорее всего, выиграет в конце.
Вы должны решить: насколько важна целостность данных?
awsome ответ! благодаря – Markus