Ленивая загрузка Entity Framework не работает из другого потока

Я только что узнал, что отложенная загрузка в Entity Framework работает только из потока, который создалObjectContext, Чтобы проиллюстрировать проблему, я сделал простой тест с простой моделью, содержащей всего 2 объекта:Person а такжеAddress, Вот код:

    private static void TestSingleThread()
    {
        using (var context = new TestDBContext())
        {
            foreach (var p in context.Person)
            {
                Console.WriteLine("{0} lives in {1}.", p.Name, p.Address.City);
            }
        }
    }

    private static void TestMultiThread()
    {
        using (var context = new TestDBContext())
        {
            foreach (var p in context.Person)
            {
                Person p2 = p; // to avoid capturing the loop variable
                ThreadPool.QueueUserWorkItem(
                    arg =>
                    {
                        Console.WriteLine("{0} lives in {1}.", p2.Name, p2.Address.City);
                    });
            }
        }
    }

TestSingleThread метод работает отлично,Address собственность лениво загружена. Но вTestMultiThreadЯ получаюNullReferenceException наp2.Address.City, так какp2.Address нулевой.

Это что баг? Это так, как это должно работать? Если да, есть ли какая-либо документация, в которой это упоминается? Я не мог найти что-нибудь на эту тему в MSDN или Google ...

И что еще более важно, есть ли обходной путь? (кроме явного вызоваLoadProperty из рабочего потока ...)

Любая помощь будет принята с благодарностью

PS: я использую VS2010, так что это EF 4.0. Я не знаю, было ли то же самое в предыдущей версии EF ...

Ответы на вопрос(1)

Ваш ответ на вопрос