작업 단위 패턴 - 상위 하위 관계 관리

c# dapper design-patterns orm unit-of-work

문제

나는 마이크로 오마이더 (dapper)를 사용하고 있으며 내 리포지토리에 Unit Of Work (UoW) 구현을 사용하려고합니다. 나는 나의 우와에서 부모 - 자식 (외래 키) 관계를 어떻게 다뤄야하는지 잘 이해하지 못했다. 예를 들어 데이터베이스 테이블에 직접 매핑되는 다음 두 엔티티가있는 경우를 예로들 수 있습니다.

public interface IUnitOfWork
{
    void MarkDirty(object entity);
    void MarkNew(object entity);
    void MarkDeleted(object entity);
    void Commit();
    void Rollback();
}

사용자가 외래 키인 User.ClientDatabaseId를 통해 ClientDatabase와 부모 - 자식 관계를 갖는 경우. User 및 ClientDatabase의 Id 속성은 Identity 열입니다. 내 UoW 인터페이스는 다음과 같이 정의됩니다.

public interface IUnitOfWork
{
    void MarkDirty(object entity);
    void MarkNew(object entity);
    void MarkDeleted(object entity);
    void Commit();
    void Rollback();
}

어떤 시점에서 동일한 IUnitOfWork 내에서 ClientDatabase와 User 모두에 대해 MarkNew ()를 호출하고 Commit ()을 호출하려고합니다. 이제 내가 원하는 것은 ClientDatabase를 하위 개체 (먼저 엔티티)에 저장 한 다음 ClientDatabase에 설정된 Id에 대해 데이터베이스 삽입의 결과로 이전에 User의 ClientDatabaseId 외래 키 속성으로 설정해야합니다. 또한 데이터베이스에 삽입됩니다. 나는 누군가가 이런 종류의 문제를 멋진 일반적인 방식으로 해결했는지 의문 스러웠다.

수락 된 답변

왜 사용자 클래스를 집계 루트 로 사용하지 않는가? 따라서 코드를 위해 데이터베이스에 삽입하기 전에 ClientDatabase가 null이 아닌지 확인합니다. null이 아니면 Id 속성을 검사하여 새로운 ClientDatabase 또는 기존 ClientDatabase (삽입 또는 업데이트를 수행해야하는지 여부를 결정)를 확인할 수 있습니다. 그런 다음 ClientDatabaseId 속성을 채울 수 있습니다.




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.