Назначение внешнего ключа POCO Entity Framework висит - PullRequest
0 голосов
/ 10 марта 2012

Для простоты у меня есть база данных с таблицей заказов и таблицей PaymentMethod.Это отношения один ко многим.В таблице Order есть много полей, описывающих заказ, а у PaymentMethod есть только Id и Name.Я сопоставил ассоциацию в EF, и в таблице заказов есть внешний ключ с именем «PaymentMethodId».У меня есть перечисление с именем PaymentMethodType, это не проблема.Я проверил тот же код ниже без использования перечисления.У меня есть много других таблиц с тем же сценарием, и я столкнулся с этим с одним другим отношением, но теперь у меня только эта проблема с этим.

В приведенном ниже коде я создаю новый заказ, и все работает нормально.Если позже я получу такой же порядок в моей программе и попытаюсь установить для PaymentMethodId другое значение, программа зависнет на 25 секунд.Я пытался отследить код через объекты POCO, и кажется, что он снова и снова повторяет / настраивает PaymentMethod и PaymentMethodId.Любые предложения или советы высоко ценится !!!Пожалуйста, не стесняйтесь задавать вопросы по любым деталям, которые я, возможно, не учел.Я использую Entity Framework 4.0 с POCO вместе с SQL Server 2008 R2.

        int orderid;
        using (PinotsPaletteEntities context = new PinotsPaletteEntities())
        {
            Order order = new Order();
            //assign other order information
            order.PaymentMethodId = (int)PaymentMethodType.CreditCard;               
            context.Orders.AddObject(order);
            context.SaveChanges();
            orderid = order.Id;
        }

        using (var context = new PinotsPaletteEntities())
        {
            Order order2 = context.Orders
                .Where(x => x.Id == orderid)
                .FirstOrDefault();
            order2.PaymentMethodId = (int)PaymentMethodType.Cash; //hangs here for 25secs
            context.SaveChanges();
        }

1 Ответ

0 голосов
/ 27 апреля 2012

У меня также возникли проблемы с настройкой свойств с использованием Entity Framework v4.1 и «ADO.NET C # POCO Entity Generator» (недавно переименован в EF 4.x POCO Entity Generator для C # ). Мой проект написан на C # с использованием ASP.NET MVC 3.

Симптомами, которые у меня были, было то, что изменение свойств работало бы хорошо с относительно небольшим набором данных (несколько десятков). После импорта записей из унаследованной системы (около 70000 с несколькими сотнями тысяч связанных записей) установка свойства по существу повесит приложение. Как и у вас, свойство, с которым у меня возникли проблемы, является внешним ключом таблицы «type».

Что было странным, так это то, что установка почти одинаковых свойств работала бы нормально. И установка свойства однажды будет работать нормально. Но переключение между типами приведет к зависанию приложения.

Я решил проблему, по крайней мере, на данный момент, путем перехода на более новый EF 4.x DbContext Generator для C # . При обновлении через Nuget это также привело к появлению последней версии Entity Framework, которая, возможно, также помогла решить проблему. Переход на DbContext потребовал минимальных изменений кода. Сгенерированные классы POCO теперь очень чистые, без страниц кода «fixup», которые создаст предыдущий шаблон T4.

...