Не были ли вы довольны ответом на другой вопрос (/6564822/kak-zastavit-ef-code-first-zaprashivat-bazu-dannyh), в котором предлагалось использовать отсоединение, AsNoTracking или перезапись изменений?
1) Может быть, вы могли бы передать интерфейс, который может создавать DbContextвместо самого контекста.
using(var context = _contextFactory.Create()) {
var entity = from table in context.Blah...;
}
Метод Create может либо создать сам конкретный класс (с небольшим поражением шаблона DI), либо использовать расположение службы для его создания.Не так приятно, но это лучше, чем встраивание вызовов службы определения местоположения повсюду, и все равно означает, что вы сами контролируете жизненный цикл.
2) Измените WinForm для чтения из веб-службы, управляемой веб-сайтом, что фактически аналогично отключению кэширования..
3) Глубоко в сердце MVC (ну, на самом деле, не так глубоко) он напрямую ссылается на контейнер DI и использует его в качестве локатора службы для передачи в качестве аргументов для вновь создаваемых объектов.Технически вы могли бы сделать что-то подобное в WinForms, но для этого понадобилось бы разбить ваше приложение на маленькие кусочки (контроллеры), которые не имеют очень долгого срока службы.Может быть, стоит взглянуть на некоторые MVC / MVP-фреймворки для WinForms, хотя я обнаружил, что больше всего цепляюсь, как увидел после быстрого гугла.