2010-12-16 3 views
0

asp.net 웹 응용 프로그램에서 최신 EF 코드 First CTP를 사용하여 문제가 발생한 것 같습니다. 코드의 부족을 용서해주십시오 (당분간). 그러나 나는 잘 설명하려고 노력할 것입니다.EF 코드 첫 번째 "트랜잭션 문제"

내 컨트롤러에 저장소 팩토리와 IDataContext를 DI 컨테이너를 통해 주입하고 있습니다. IDataContext는 내 DbContext에 대한 인터페이스 일 뿐이며 저장소 팩토리 자체에 이들 중 하나가 삽입됩니다.

리포지토리 (공장 출하시)에서 사용자를 검색 한 다음 using (DataContext) 블록 (주입 된 IDataContext)에서 일부 속성을 추가 할 때 변경 사항이 저장되지 않습니다.

새로운 사용자를 만들면 문제가 없습니다. 그러나 사용자의 ICollection에 레코드를 추가하면 유지되지 않습니다.

하나의 DataContext를 사용하여 사용자를 만든 다음 블록을 사용하는 두 DataContext를 사용하여 레코드를 추가하는 테스트를 만들었습니다. 그리고 그것은 잘 작동합니다 (이 create-dispose-create-dispose 시퀀스에서). 심지어 그 전에 ..

내가 못을 박았다 내일 문제가 있어야합니다 -

내 생각 엔 컨트롤러에 IDataContext의 다른 인스턴스가 데이터베이스로 전송 명령에만 영향을 미친다는 것입니다. 그러나 문제를 추적 할 수 없다면 어떤 제안도 좋을 것입니다.

+0

나는 비슷한 문제가 있었지만, 트랜잭션이 null이되는 것에 대해 더 많은 것이 었습니다. OnActionExecuting 인 컨트롤러 이벤트를 무시하고 트랜잭션 값을 설정하여 수정했습니다. – paragy

+0

DbContext 인스턴스를 트랜잭션으로 사용하고 있습니까? 또는 어쩌면 DbContext를 싱글 톤 (IoC 바인딩을 통해 Singleton에서와 같이 여전히 "new'd up")으로 만들고 인스턴스가 SaveChanges()를 호출 할 때마다 데이터베이스의 현재 상태를 반영하도록 모든 인스턴스를 업데이트하고 있습니까? – nick

답변

0

나는 그것을 고칠 수 있었다. 기본적으로 DependencyResolver에 내 DbContext의 인스턴스가 요청 당 한 것임을 알릴 필요가있었습니다.

희망으로하면 누군가 번거 로움을 덜 수 있습니다.