2011-11-17 3 views
4

MVC3 프로젝트가 있는데 문제가 생겼습니다. 내 POCO 개체 중 하나를 매개 변수로 사용하는 Create 컨트롤러가 있습니다. 이 객체를 다음과 같이 데이터베이스에 추가합니다.POCO 개체를 EntityFramework의 Proxy 개체로 변환하십시오.

entity = dbSet.Add(entity); 

이 메소드가 반환 된 후 객체의 지연로드 기능을 사용하고 싶습니다. 불행하게도 객체는 EntityFramework에 의해 생성 된 Proxy 객체가 아닙니다 ... 어떻게 든 이것을 해결할 수있는 방법이 있습니까? 당신이 Add 방법으로 통과 할 때

는 AFrieze

+0

함께 작업 할 때 POCO 프록시를 사용하고 있습니까? 컨트롤러를 만드시겠습니까? 내가 아는 한, Entity Framework 및 POCO 프록시의 요구 사항 중 하나는 ObjectContextOptions.ProxyCreationEnabled를 true로 설정하여 전체 ObjectContext에서 프록시를 사용할 수 있기 때문에 POCO 및 POCO 프록시를 혼합하여 사용할 수 없습니다. 다음은 좋은 링크입니다 : http://msdn.microsoft.com/en-us/library/dd468057.aspx. – Josh

+0

MVC3 프로젝트는 엔티티 프레임 워크를 완전히 인식하지 못하고 Models 프로젝트 (POCO 객체) 및 BAL (Repository 액세스)을 참조합니다. Lazy 로딩은 데이터베이스에서 쿼리 한 객체로 작업하는 한 프로젝트의 모든 레벨에서 훌륭하게 작동합니다. 기본적인 문제는 MVC3 프로젝트에서 객체를 생성하고 BAL에 전달하여이를 저장하고 컨텍스트에 적절하게 연결하는 것입니다. 그러나 프록시 객체가 아닌 POCO 객체에 대한 참조가 남아 있습니다. 게으른 로딩을 사용할 수 있습니다. – AFrieze

+0

Ahhh, 잡았다. BAL로 정보를 보내고 ObjectContext.CreateObject (...)를 사용하도록 BAL을 수정 한 다음 결과 개체를 반환하면 모든 프록시 규칙이 충족되는 한 해당 개체는 POCO 프록시 여야합니다. 문제는 POCO 프록시 개체를 만들지 않는 entity = dbSet.Add (엔터티)를 사용하고 있다는 것입니다. – Josh

답변

4

엔티티가 이미 프록시되어야합니다 감사합니다. Add 메서드는 클래스의 다른 인스턴스를 반환하지 않으며 기존 인스턴스의 유형을 프록시 유형으로 변경할 수 없습니다.

옵션은 다음과 같습니다

는 컨트롤러의 입력으로 엔티티를 사용하여
  • 되지 않음 - 일부 뷰 모델을 사용하고 dbSet.Create에 의해 만들어진 새로운 개체를 채울 -이 빈 프록시 분리 된 엔티티를 생성합니다.
  • 컨트롤러에서받은 엔티티를 추가하는 대신 dbSet.Create으로 새 것을 만들고 복사 한 데이터를 수신 된 것으로 복사하십시오.
  • 기본 모델 바인더를 사용하지 마십시오. 기본 엔티티 생성자 대신 dbSet.Create을 사용할 사용자 정의 모델 바인더 (HTTP 요청에서 데이터를 추출하고 컨트롤러에 전달 된 매개 변수를 채우는 코드)를 만듭니다.
관련 문제