2017-01-25 5 views
0

저는 Asp.Net 응용 프로그램에서 데이터베이스 액세스를 추상화하기 위해 UnitOfWork 패턴을 사용하고 있습니다. 기본적으로 나는 UnitOfWork에 패턴 접근 방식은 여기에 설명 따르UnitOfWork 패턴을 사용하여 추가에서 ID를 얻는 방법은 무엇입니까?

https://chsakell.com/2015/02/15/asp-net-mvc-solution-architecture-best-practices/

을하지만, 내가 새로 추가 된 항목의 ID를 얻을 방법을 이해하기 위해 사투를 벌인거야. 새 고객을 고객 저장소에 추가하려는 경우 고객 ID는 어떻게 얻을 수 있습니까? 문제는 Add와 Commit이 분리되어 있고 Id가 Commit 이후에 알려지지 않았다는 것입니다.

UnitOfWork 패턴을 사용하여 추가 된 항목의 ID를 가져 오는 방법이 있습니까?

+1

큰 질문은 여기에 있습니다. 왜이 ID가 필요한가요? 링크를 읽지는 않았지만, 이것은 하나의 트랜잭션으로 완전한 객체 그래프를 커밋하는 데 도움이되지 않는 아키텍처와 같은 냄새를 풍깁니다. –

+0

ID를 쿠키에 저장해야합니다. – brinch

답변

0

당신이 패턴을 깨고 새로 생성 된 엔티티에 대한 몇 가지 추가 정보를 전달하지 않으면 그렇게 할 방법이 없다고 생각합니다.

커밋이 성공한 이후에만 ID가 할당되고 생성/업데이트/삭제 된 엔티티에 대한 정보가없는 경우 거의 알 수 없습니다.

내가 한번 아래의 코드 (내가 생각하지 않는 것이 좋습니다하지만이 그것을 사용 특별히 필요) 작업

public string Insert(Person entity) 
{ 
    uow.Repository.Add(entity); //public Repository object in unit of work which might be wrong 
    Response responseObject = uow.Save(); 
    string id = entity.Id; //gives the newly generated Id 
    return id; 
} 
1

단위는 전체 요청에 대한 거래해야을 사용했다.

그냥 새로 만든 개체에서 사람 ID를 반환하면됩니다.

이 다를 것입니다 데이터 액세스를 위해 사용하고있는 기술에 따라,하지만 당신은 엔티티 프레임 워크를 사용하는 경우, 다음을 수행 할 수 있습니다 :이 방법으로는 Person 인스턴스를 생성하여

var person = DbContext.Set<Person>().Create(); 

// Do your property assignment here 

DbContext.Set<Person>().Add(person); 

return person.Id; 

을, 당신이 얻을 lazy 로딩을 허용하고, SaveChanges가 호출 될 때 (작업 단위를 종료하여) 업데이트 될 것이므로 Id 속성을 사용하는 추적 된 인스턴스.