Entity Framework и многопоточность

У нас возникли некоторые проблемы при разработке нашего многопоточного приложения, управляемого Entity Framework, и мы хотели бы получить некоторые рекомендации.Мы создаем объекты в разных потоках, объекты добавляются в коллекции, которые затем привязываются к данным с различными элементами управления wpf. Класс ObjectContext не является потокобезопасным, поэтому для управления этим у нас, по сути, есть 2 решения:

Решение 1 имеет единый контекст и тщательно использует блокировку, чтобы гарантировать, что к нему не обращаются 2 потока одновременно. Это было бы относительно просто реализовать, но потребовало бы, чтобы контекст был активным на протяжении всего приложения. Неужели это плохая идея - открывать один экземпляр контекста таким образом?

Решение 2 - создать объекты контекста по запросу, а затем немедленно отсоединить объекты, затем сохранить их в наших собственных коллекциях, а затем повторно присоединить их, чтобы выполнять какие-либо действия. обновление. Однако при этом возникают некоторые серьезные проблемы, поскольку при отсоединении объектов они теряют ссылки на объекты свойств навигации. Также существует проблема, что 2 потока все еще могут пытаться получить доступ к одному объекту, и оба пытаются прикрепить () его к контексту. Кроме того, нам нужно будет предоставлять новый контекст каждый раз, когда мы хотим получить доступ к свойствам навигации сущностей.

В: Правильно ли одно из двух решений, если нет, как вы рекомендуете решать эту проблему?

41
задан Martin Richards 1 February 2012 в 16:23
поделиться