2013-01-19 2 views
5

EF6을 사용하여 사용자 지정 개체 인스턴스 작성자를 삽입하는 방법이 있습니까? 내가해야할 것은 matrialization이 일어나기 전에 엔티티의 인스턴스를 EF에 제공하는 것입니다.사용자 지정 엔티티 구체화

기본적으로 매개 변수가없는 생성자로 내 POCO 엔티티를 정의 할 수 있기를 바랍니다. 따라서 DI 작성을 사용하려면 결국 EF로 지속됩니다.

var oc = (this as IObjectContextAdapter).ObjectContext; 
oc.ObjectMaterialized += (s, e) => 
{ 
    //resolve and inject dependencies here using e.g. public properties 
}; 

하지만 난 정말 생성자에 선언 된 의존성을 가지고 싶어요 :

나는 내가 ObjectMaterialized 이벤트를 사용하여 비슷한 achive 수 있다고했습니다.

아이디어가 있으십니까? 건배, .m

+0

내가 묻는다면, 어떤 의존성을 주입하고 싶습니까? –

+0

기본적으로 내 도메인 모델 집계의 도메인 서비스. 나는 MongoDB와 RavenDB 경험에서 왔는데, 도메인 모델을 스토리지에 저장하는 것은 정말 쉽고 deserialization 시간에 dependencis를 주입하는 것은 정말 쉽다. 그래서 나는 EF6 (alfa2 현재). 기본적으로 엔티티를 해결하기 위해 컨테이너를 사용하도록 EF에 지시하거나 적어도 엔티티를 해결하는 방법을 묻는 방법을 찾으려고합니다. –

답변

4

기본 ObjectContext를 사용하여 EF 코드를 살펴 본 것이 가능하지 않다고 생각합니다. 궁극적으로 객체는 ObjectContext.CreateObject에 의해 생성됩니다. 이것은 두 가지 중 하나를 수행합니다. 기본 생성자를 호출하거나 프록시 생성이 활성화 된 경우 관련 프록시 유형을 만듭니다. 프록시 유형은 향상된 변경 내용 추적 및 지연로드 속성에 사용됩니다.

그러나 ObjectContext.CreateObject은 가상이므로 파생 클래스에서 재정의 할 수 있습니다. 이 파생 클래스는 컨테이너 (또는 수명 범위)에 대한 참조를 제공 한 다음 재정의 된 CreateObject 호출에서 엔터티를 확인하는 데 사용됩니다.

그러면 DbContext에 사용할 ObjectContext으로 파생 형식을 어떻게 지정합니까? 자, 이 사용되어야하는 a constructor that takes an instance of the ObjectContext이 있습니다.

이것은 내 생각이 약간은 레일에서 벗어나기 시작합니다. ObjectContext 자체는 연결 문자열에서 사용하는 모델에 대해 to be told이 필요하기 때문입니다. 이것은 모델이 지연 생성되어서 DbContext이 생성되기 전에 사용할 수 없으므로 코드 첫 번째 접근 방식이 작동하지 않는다는 것을 의미한다고 생각합니다. 그러나 모델 첫 번째 접근 방식의 경우이 작업이 가능할 수 있습니까?

관련 문제