2012-03-09 2 views
0

간단히하기 위해 Order 테이블과 PaymentMethod 테이블이있는 데이터베이스가 있습니다. 일대일 관계입니다. Order 테이블에는 주.을 설명하는 많은 필드가 있으며 PaymentMethod에는 Id W Name 만 있습니다. EF에 연관을 매핑했으며 "PaymentMethodId"라는 주문 테이블에 외래 키가 있습니다. PaymentMethodType이라는 열거 형을 가지고 있는데, 이것은 문제가 아닙니다. 열거 형을 사용하지 않고 동일한 코드를 아래 테스트했습니다. 나는 같은 시나리오를 가진 많은 다른 테이블을 가지고 있으며 다른 관계를 가지고이 테이블을 만났지만, 이제는이 테이블에이 문제 만 있습니다.Entity Framework POCO 외래 키 할당이 걸려 있음

아래의 코드에서 나는 새로운 순서를 만들고 모든 것이 잘 동작합니다. 그런 다음 나중에 프로그램에서 동일한 순서를 가져 와서 PaymentMethodId를 다른 값으로 설정하려고하면 프로그램이 약 25 초 동안 중지됩니다. POCO 객체를 통해 코드를 추적하려고 시도했지만 반복적으로/PaymentMethod 및 PaymentMethodId를 반복 설정하는 것으로 보입니다. 모든 제안이나 조언을 많이 주시면 감사하겠습니다 !!! 제가 빠뜨린 부분에 대해서는 언제든지 질문하십시오. SQL Server 2008 R2와 함께 POCO와 함께 Entity Framework 4.0을 사용하고 있습니다.

 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(); 
     } 
+0

POCO T4 템플릿을 사용하고 있습니까? 예상치 못한 지연로드로 인해 지연이 발생하지 않았 음을 확인할 수 있습니까? –

+0

'PaymentMethodId' 속성을 제거하고'PaymentMethod' 객체를 설정하면 어떻게됩니까? –

+0

PaymentMethod 객체를 null 또는 좋은 객체로 설정하면 같은 결과를 얻습니다. PaymentMethodId와 똑같습니다. – user1260112

답변

0

또한 엔티티 프레임 워크 버전 4.1과 "ADO.NET의 C#을 POCO 엔터티 발전기"(최근 EF 4.x POCO Entity Generator for C#로 변경)를 사용하여 속성 설정 문제를 경험했다. 내 프로젝트는 ASP.NET MVC 3을 사용하여 C#으로 작성되었습니다.

증상은 상대적으로 작은 데이터 세트 (수십 개)로 잘 작동한다는 것입니다. 레거시 시스템 (수십만 개의 관련 레코드가있는 약 70,000 개)에서 레코드를 가져온 후에 속성을 설정하면 기본적으로 응용 프로그램이 중단됩니다. 너와 마찬가지로 내가 문제를 겪고있는 속성은 "형식"테이블에 대한 외래 키이다.

기괴한 점은 거의 동일한 속성을 설정하면 문제가 없다는 것입니다. 한 번 속성을 설정하면 문제가 없습니다. 그러나 형식을 전환하면 응용 프로그램이 중지됩니다.

필자는 적어도 당분간 새로운 EF 4.x DbContext Generator for C#으로 마이그레이션하여 문제를 해결했습니다. Nuget을 통해 업그레이드함으로써 Entity Framework의 최신 버전을 가져와 문제를 해결할 수도있었습니다. DbContext로 마이그레이션 할 때 최소한의 코드 변경이 필요했습니다. 생성 된 POCO 클래스는 이전 T4 템플릿에서 생성하는 "픽스 업"코드가없는 매우 깨끗합니다.

관련 문제