В принципе вам не нужно утилизировать () ваш DataContext по причинам, рассмотренным здесь:
Когда мне следует утилизировать контекст данных
http://csharpindepth.com/ViewNote.aspx?NoteID=89
Основной причиной реализации IDisposable для типа является избавление от любых неуправляемых ресурсов.Единственный неуправляемый ресурс, выделенный DataContext, - это базовое соединение с базой данных, но DataContext уже позаботится об открытии и закрытии соединения по мере необходимости.
Главное, чего вы хотите избежать, это вернуть коллекцию IEnumerable, а затем никогдаперечисляя его, так как это приведет к тому, что соединение останется открытым бесконечно долго.Однако, поскольку вы возвращаете только один объект, вам не нужно беспокоиться об этом.
Также обратите внимание, что если получить доступ к какому-либо свойству отношений в возвращенном объекте, это может вызвать мгновенное открытие соединения, так что свойство может быть загружено с отложенным доступом.Вы можете избежать этого, используя DataLoadOptions.LoadWith () с вашим DataContext, чтобы загружать любые свойства, к которым вы хотите получить доступ.См. http://msdn.microsoft.com/en-us/library/system.data.linq.dataloadoptions.aspx
Что касается последней части вопроса, если возвращаемые сущности содержат свойства, которые могут быть загружены с отложенной загрузкой, то они будут содержать внутренние ссылки для поддержки DataContext, который будет хранить его в памяти.Если у вас больше нет ссылок на эти объекты, DataContext, конечно, будет собираться мусором, как и любой другой объект.