Просто краткое замечание - две части кода примерно одинаковы в своей основной проблеме. Это то, на что я обращаю внимание, потому что вы не хотите продолжать открывать и закрывать контекст (см. Второй пример), в то же время вы не уверены, что вы можете доверять Microsoft, чтобы правильно распоряжаться контекстом для вас.
Одной из вещей, которые я сделал, было создание общего базового класса, который лениво загружает Контекст и реализует деструктор базового класса для избавления от вещей. Это хорошо работает для чего-то вроде инфраструктуры MVC, но, к сожалению, приводит к проблеме необходимости передачи контекста различным уровням, чтобы бизнес-объекты могли совместно использовать вызов.
В конце концов я использовал что-то, используя Ninject, чтобы внедрить эту зависимость в каждый слой, и проследил за использованием