У нас возникли проблемы с разработкой нашего многопоточного приложения Entity Framework и хотелось бы получить некоторые рекомендации. Мы создаем объекты в разных потоках, объекты добавляются в коллекции, которые затем привязываются к различным элементам управления wpf. Класс ObjectContext не является потокобезопасным, поэтому для управления этим мы имеем по существу 2 решения:
Решение 1 имеет один контекст и тщательно использует блокировку, чтобы гарантировать, что 2 потока не обращаются к нему в одно и то же время. Это было бы относительно просто реализовать, но потребовало бы, чтобы контекст был живым на протяжении всего приложения. Это плохая идея, чтобы открыть один экземпляр контекста таким образом?
Решение 2 - создавать объекты контекста по требованию, а затем немедленно отделять объекты, а затем удерживать их в наших собственных коллекциях, а затем повторно присоединять их для любого обновления. У этого есть некоторые серьезные проблемы для использования, хотя, как при отсоединении объектов они теряют ссылки на объекты свойств навигации. Также есть проблема, что 2 потока могут пытаться получить доступ к одному объекту, и оба пытаются связать() с контекстом. Кроме того, нам нужно будет предоставлять новый контекст каждый раз, когда мы хотим получить доступ к свойствам навигации сущностей.
Q: Являются ли какие-либо из двух решений действительными, если не так, как вы порекомендовали нам это?