2013-11-28 7 views
2

저는 실제로 EF를 사용하여 동일한 데이터베이스에 액세스 할 여러 저장소를 설계 할 때 로프 학습에 대한 도움을 찾고 있습니다. 각 저장소가 자신의 개인 DBContext를 가지고 있지만이 개념에 어려움을 겪고있는 예제 코드를 보았습니다. 나는이 프로젝트에서 Generic Interface에 관심이 없다.EF를 사용하여 동일한 실시간 데이터에 액세스하는 여러 리포지토리를 디자인하는 방법은 무엇입니까?

상속 된 인터페이스를 다시 사용할 수있는 단일 응용 프로그램에서 Identity 기반 (승인시) 및 범주, 항목 등과 같은 다른 작업 관련 리포지토리가 여러 개인 인터페이스가 필요하므로 여러 DbContext 인스턴스가 필요합니다.

SQL에서 트랜잭션을 커밋하거나 롤백 할 수있는 트랜잭션이 있으므로 EF에서 여러 repos가 동일한 (실시간) 데이터에 액세스합니까? 더 나은 질문은 하나의 응용 프로그램이 많은 직업 관련 리포지토리를 상속 받기를 원할 때 DAL을 어떻게 디자인해야 하는가하는 것입니다.

jgauffin는 뜻 했는가, 이 무엇을 의미하는지

"저장소가 100 % 완전한 추상화가 있는지 확인"?

다음은 내가 알아 내려고 시도하는 간단한 예입니다. 이 연습이 합리적입니까?

public class OneRepo: IRepository, IDisposable 
{ 

private DbContext context = new DbContext(); 

// Methods and whatnot... 

} 

그리고 두 번째 저장소는 OneRepo에서 동일한 db 연결을 필요로하지만 별도의 메모리 단위 작업 단위가 있다고 생각합니까? 내 질문에 잘 기록되어 있지 않은 경우

public class AnotherRepo: IRepository, IDisposable 
{ 

private DbContext context = new DbContext(); 

// Methods and whatnot...  
} 

나는 죄송합니다. 나는 실제로 게시하는 것이 상대적으로 새로운데, 내가 스스로를 분명하게하는지 확신 할 수 없다. 나는 일반적으로 일반적인 저장소를 좋아하지 않으며 역할 인터페이스 패턴을 사용하여 권한 및/또는 사용자 작업을 기반으로 저장소를 만들고 싶다고 이미 결정했습니다. 설명하는 도움을 주시면 대단히 감사하겠습니다!

+0

실시간 데이터 란 무엇입니까? 그리고 다른 DBContext를 사용하는 문제는 어디에 있다고 생각합니까? – Euphoric

+0

여러 컨트롤러에 대해 컴파일 할 때 여러 DBContext 인스턴스를 실행하면 데이터 무결성이 손상 될 수 있다는 생각이 들지 않는다는 것을 의미하지는 않습니다.하지만 변경 사항을 생각하기에 바보 같을 수도 있습니다. 데이터베이스에 저장됩니다. – yardpenalty

+0

우리가 자원을 효과적으로 사용하고 있는지 확인하기 위해 Unit Of Work 또는 Unit of Work가 채택 된 이유가 아닙니까? – yardpenalty

답변

6

당신은 당신이 동일한 작업 단위에서 모든 저장소에 동일한 컨텍스트를 전달할 수 있습니다 저장소

public class FirstRepo 
{ 
    DbContext _ctx; 

    public FirstRepo(DbContext ctx) 
    { 
     this._ctx = ctx; 
    } 
} 

public class AnotherRepo 
{ 
    DbContext _ctx; 

    public AnotherRepo(DbContext ctx) 
    { 
     this._ctx = ctx; 
    } 
} 

이 방법으로 데이터 컨텍스트를 주입.

+0

샘플 및 설명 주셔서 감사합니다. 이것은 내가 찾고 있었던 바로 그 것이다! – yardpenalty

+0

변경 사항을 저장하면 UnitOfWork 클래스에서 호출됩니다 ... 올바른가요? –

+0

@Bill 나는 UoW에 대해서도 물어볼 예정이었다. 나는 또한 역할/헤더 인터페이스 주입 접근법을 사용하거나 Ninject와 같은 의존성 주입 접근법을 사용하는 것이 가장 좋은지 궁금합니다. 미리 감사드립니다! – yardpenalty