2014-07-21 6 views
0

작업 단위의 중요성을 나에게 알릴 수 있습니까?단일 작업을 수행 할 수있는 작업 단위는 어떻게됩니까?

내가 거래

중 하나가 예를 들어 줄 경우 그것은 정말 좋은 것위한 작업 단위의 정확한 의미 understance 없습니다 - 그것은 거래에 유용 방법에 대해 설명합니다. 작업 클래스의

내 단위는 다음과 같다 :

 public class UnitOfWork : IUnitOfWork 
{ 
    private readonly IDataContext _dataContext; 
    private Dictionary<string, object> _repositories; 

    public UnitOfWork(IDataContext dataContext) 
    { 
     _dataContext = dataContext; 
    } 

    public int SaveChanges() 
    { 
     return _dataContext.SaveChanges(); 
    } 

    public IRepository<TEntity, TKey> GetRepository<TEntity, TKey>() where TEntity : class 
    { 
     if (_repositories == null) 
     { 
      _repositories = new Dictionary<string, object>(); 
     } 

     string key = String.Format("{0}|{1}", typeof(TEntity).Name, typeof(TKey).Name); 

     if (_repositories.ContainsKey(key)) 
     { 
      return (IRepository<TEntity, TKey>)_repositories[key]; 
     } 

     Type repositoryType = typeof(Repository<TEntity, TKey>); 
     _repositories.Add(key, Activator.CreateInstance(repositoryType, _dataContext)); 

     return (IRepository<TEntity, TKey>)_repositories[key]; 
    } 
} 

도움이 될 것입니다 당신에게

모든 예 감사합니다.

업데이트 :

 Suppose - 


        _unitOfWork.GetRepository<ModelObject, int>().Update(MOdelObject); 
        _unitOfWork.GetRepository<ModelObject, int>().Delete(MOdelObject); 

문제는 다음 두 번째 문에 발생하면, 먼저 문 롤백 할 것인가?

위와 같이 몇 가지 예를 들려주세요. 어떻게 작동하는지 이해할 수 없습니까?

+0

가 쉽게 사용할 수 온라인 "작업 단위"의 매우 간결한 정의는 다음과 같습니다 : http://martinfowler.com/eaaCatalog/unitOfWork.html 당신이 그것에 대해 이해하지 못하는 특정한 것이 있습니까? – David

+0

몇 가지 세부적인 내용으로 질문을 업데이트했습니다. – user3711357

답변

0

두 번째 문에 문제가 발생하면 첫 번째 문을 롤백합니까?

수정. 실제로이 작업을 테스트하여 정확히 무엇을하는지 확인할 수 있습니다. 필자는 데이터베이스에서 프로파일 러를 열고 응용 프로그램에서 오류를 강제하는 동안 응용 프로그램에서받은 명령을 모니터링하는 것이 좋습니다. 이렇게하면 실제로 데이터베이스에 전송되는 내용과시기가 표시됩니다.

는 현재 작업의 당신의 단위를 약속한다

public int SaveChanges() 
{ 
    return _dataContext.SaveChanges(); 
} 

그래서 SaveChanges() 때까지 작업 단위에 호출, 아무것도 데이터베이스에 지속되지 않습니다. 그것은 모두 작업 개체 단위에 의해 메모리에서 유지 관리됩니다. 당신이이 라인을 가지고한다면 : 당신이 호출 할 때까지

_unitOfWork.GetRepository<ModelObject, int>().Update(MOdelObject); 
_unitOfWork.GetRepository<ModelObject, int>().Delete(MOdelObject); 

이러한 변경이 데이터베이스에 지속되지 않습니다

_unitOfWork.SaveChanges(); 
+0

저장소 인스턴스가 이미 일부 엔터티에 대해 생성 된 다음 다른 인스턴스를 검색하여 새 인스턴스를 만드는 경우 우리가 확인하는 항목 때문에 발생합니까? 그렇다면 이것이 출시 될 때 엔터티가 메모리에 보존 될 때, 언제 저장소 인스턴스에서 제거/삭제/분리해야합니까? '... if (_repositories.ContainsKey (key)) { return (IRepository ) _ 저장소 [key]; } 유형 repositoryType = typeof (저장소 ); – user3711357

+0

@ user3711357 : 여기에 저장소를 만드는 방법에 익숙하지 않아 조금 불필요한 것으로 보입니다. 그러나 해당 데이터 컨텍스트를 사용하여 생성 된 모든 리포지토리는 해당 데이터 컨텍스트의 작업 단위에 포함될 것입니다. – David