0

저는 C#과 함께 사용하는 Entity Framework 4.0을 처음 사용하고 있으며 현재이 기능을 시험 중입니다.Entity Framework 4 - 생성 된 엔터티 내에 ObjectContext 참조 포함

대부분의 유사한 ORM과 마찬가지로 생성 된 엔티티에서 수행 된 데이터 조작 및 CRUD 문 생성을 처리하기 위해 Context 객체를 사용합니다.

즉, 데이터베이스에 변경 사항을 다시 저장하려면 엔티티를 인스턴스화 한 ObjectContext에 대한 참조에 항상 액세스 할 수 있어야합니다.

액세스 할 수있는 범위 (예 : 같은 메서드)에서 컨텍스트를 만든 경우에는 문제가 없지만 메서드에 엔터티 및 엔터티 집합을 전달하고이 메서드로 변경 내용을 저장하려면 어떻게해야합니까? 유일한 쉬운 방법은 매개 변수와 함께 ObjectContext를 전달하는 것입니다.

또 다른 해결책은 ObjectContext를 일종의 전역 변수에 배치하는 것입니다. 말할 필요도없이, 나는이 두 가지 접근법에 대한 스타일링 및 유지 관리 문제를 발견합니다.

간단히 말해서 내가 상상할 수있는 가장 좋은 방법은 엔터티 또는 엔터티 집합에서 ObjectContext에 대한 참조를 얻는 것입니다. 기본적으로 가능하지 않다는 것을 알고 있습니다.

I have found a method 확장 메서드를 추가하여 개체에서 ObjectContext를 가져 오는 것을 보여줍니다. 그러나 관계가있는 엔티티에서만 작동하며이 메서드를 호출하는 것은 작성자에게 비용이 많이 듭니다.

T4 템플릿을 수정하여 모든 엔티티에 Context 속성을 추가하고 엔티티의 인스턴스에 자동으로 채우도록하려고 생각했습니다.

나는 T4 템플릿을 한 번 수정하여 Entity Framework에서 생성 된 클래스에 최대 길이를 적용했습니다 (Julie Lerman의 Programming Entity Framework 4 책을 참고). 지금까지 T4 구문을 정말 좋아한다고 말할 수는 없지만 최선/유일한 방법 인 경우 ...

누구나 이미이 작업을 수행 한 사람이 누구이며이 작업을 처리하는 가장 좋은 방법은 무엇입니까? 자신의 T4 템플릿을 공유하거나 가장 좋은 부분 방법이나 이벤트가 무엇인지를 설명하여 기꺼이 해결할 수 있습니까?

이러한 접근 방식을 사용할 때 주요 단점은 무엇입니까? ObjectContext에 대한 참조가 너무 많아서 엔티티 중 일부가 범위에 남아 있지만 실제로 ObjectContext에 더 이상 사용하지 않는 경우 GC에서 다시 수집 할 수있는 기능이 지연되거나 지연 될 수 있습니다.

감사합니다.

답변

0

매개 변수로 개체 컨텍스트를 엔티티와 함께 ​​전달해야하는 경우 잘못된 작업을 수행하고 있습니다.

일반적으로 컨텍스트는 잘 정의 된 레이어에서만 필요합니다. 논리에 컨텍스트를 요구하는이 계층의 모든 클래스는 특수 클래스 컨텍스트 공급자 (서비스 로케이터라고도 함)를 통해 컨텍스트를 수신 할 수 있습니다. 컨텍스트 프로 바이더는, 현재의 문맥 인스턴스를 몇개의 기억 장치에 보관 유지합니다. 독자적으로 생성 할 수도 있고, 또는 thread마다, http 요구마다 저장할 수도 있습니다.

클래스 내에 복수의 문맥 인스턴스가 필요한 경우, 공장으로 일하기.

또 다른 일반적인 접근 방식은 종속성 주입과 결합됩니다.컨스트럭터 (또는 속성)를 통해 컨텍스트를 클래스에 전달하면 필요한 모든 초기화 (필요한 인스턴스 만들기 및 모든 종속성 전달)를 수행하는 부트 스트 래퍼 코드가 생깁니다. 다시 컨텍스트 또는 팩토리를 전달할 수 있습니다. 이것은 일반적으로 배관을 할 IoC 컨테이너와 함께 사용됩니다.

이 인프라를 준비하고 나면 해당 레이어의 초기화 된 클래스에 엔티티를 전달할 수 있으며 컨텍스트를 사용할 수있게됩니다.

관련 문제