2011-02-13 3 views
4

Unity의 EF4 ObjectContext에 문제가 있습니다.Unity를 사용하여 EF4 ObjectContext를 등록하는 올바른 방법은 무엇입니까?

container.RegisterType<ObjectContext, MyObjectContext>(
    new TransientLifetimeManager(), new InjectionConstructor()); 

그것은 나를 제공 : 유니티는 다음 코드를 사용하여 내 ObjectContext를 해결하려고 할 때 특히,

지정된 이름의 연결이 하나의 구성에서 발견되지는 함께 사용할 수 없습니다 EntityClient 공급자이거나 유효하지 않습니다.

는 나는 (매개 변수가없는 생성자와 함께 사용)를 EF4 데이터 모델을 만들 때 설정 한 하드 와이어 연결을 사용할 수있을 것이라고 가정하지만, 내가 명시 적으로이 통과해야 할 것 같다 :

container.RegisterType<ObjectContext, MyObjectContext>(
    new TransientLifetimeManager(), new InjectionConstructor(connectionString)); 

또한이 메서드는 내 (일회용) ObjectContext의 인스턴스를 만드는 것으로 보이므로이를 파괴 할 적절한 장소는 언제입니까?

아니면 다른 방식으로해야하나요?

미리 감사드립니다.

답변

2

예외 "지정된 명명 된 연결이 구성에서 발견되지 않았거나 EntityClient 공급자와 함께 사용하도록 설정되지 않았거나 유효하지 않습니다." 분명히 등록 된 유형의 해석에 실패한 결과는 아니지만 EF 예외입니다.

public MyObjectContext() : base("name=MyObjectContext", "MyObjectContext") 
{ 
    ... 
} 

및 /의 Web.config의 app.config에 연결 문자열을 추가 :

EF의 디자이너는 다음과 같이 생성자와 컨텍스트를 생성해야합니다. 설계자가 잘못하지 않았다면이 "명명 된 연결"은 "EntityClient 공급자와 함께 사용하지 않거나 유효하지 않습니다"라는 것을 배제합니다. "명명 된 연결"은 "구성에서 찾을 수 없습니다"라는 것입니다.

연결 문자열이 ObjectContext을 해결하는 프로젝트의 app.config/web.config 에 있는지 확인 했습니까? 예를 들어 별도의 클래스 라이브러리에 EF 모델이 있으면 EF는 해당 프로젝트에 적절한 연결 문자열이있는 app.config를 만듭니다. EF 클래스 라이브러리를 참조하는 다른 프로젝트에서이 모델을 사용하는 경우이 프로젝트의 app.config/web.config에 연결 문자열을 수동으로 복사해야합니다. EF는 클래스 라이브러리의 구성을 조사하지 않습니다.

질문에 관해서는 ObjectContext를 파괴 할 적절한 장소는 무엇인가? 가장 일반적인 대답은 "더 이상 필요하지 않을 때"입니다. 프로젝트 컨텍스트를 모른 채 조언을하는 것은 어렵습니다. 필요한 데이터 액세스가 한 가지 방법이라면 다음과 같이 쓸 수 있다고 생각합니다.

using (var context = container.Resolve<ObjectContext>()) 
{ 
    // your EF operations 
} 
+0

감사합니다. Slauma, EF 프로젝트에서 app.config를 확인하지 않았습니다. 당신 말이 맞습니다. 이 연결 문자열을 web.config 파일에 복사하면 매개 변수없는 생성자로 되돌릴 수있었습니다. ObjectContext 처분에 관해서는 더 자세히 조사 할 필요가 있으며 다른 질문에서이 내용을 열어 볼 수 있습니다. 발견 된 샘플 구현을 사용하고 있으며 ObjectContext를 처리하기 가장 좋은 부분을 결정하기 전에 더 잘 이해해야합니다. –

관련 문제