확장 기능을 사용할 때 여러 개의 맵 추가하기

dapper dapper-extensions

문제

더 이상 확장 기능을 사용하지 않고 클래스 매퍼 에 대한 질문이 있습니다. 불행히도 내 테이블의 대부분은 다른 스키마와 같은 그들에게 어떤 매핑이 필요합니다.

그래서 나는 일반적으로 아래와 같이 DefaultMapper를 교체하는 작업을 많이하고 있음을 발견했다.

public Hierarchies HierarchyGetByName(string aName)
{
    Hierarchies result;

    using (SqlConnection cn = GetSqlConnection())
    {
        cn.Open();

        Type currModelMapper = DapperExtensions.DapperExtensions.DefaultMapper;
        try
        {
            DapperExtensions.DapperExtensions.DefaultMapper = typeof(HierarchiesMapper);
            IFieldPredicate predicate = Predicates.Field<Hierarchies>(f => f.Name, Operator.Eq, aName);
            result = cn.GetList<Hierarchies>(predicate).FirstOrDefault();
        }
        finally
        {
            DapperExtensions.DapperExtensions.DefaultMapper = currModelMapper;
        }


        cn.Close();
    }

    return result;
}

만약 내가 2 테이블에 액세스하면 예를 들어 이것을 두 번해야합니다.

한 번에 모든 매퍼 클래스를 추가하여 컬렉션을 말하고 액세스되는 테이블에 따라 올바른 클래스를 선택하는 방법이 있습니까?

수락 된 답변

엔티티에 맞춤 재 매핑을 적용하는 클래스를 클래스에 추가 할 수 있습니다. 예를 들어, 이러한 3 개의 빈 클래스는 AnotherDifferentTypeOfDapperClassMapper가 NotificationProfile에 적용되는 동안 PrefixDapperTableMapper를 Profile 및 FileNotificationAdhocRecipient 클래스에 적용합니다.

public class ProfileMapper : PrefixDapperTableMapper<Domain.Entities.Profile>
{
}

public class FileNotificationAdhocRecipientMapper : PrefixDapperTableMapper<Domain.Entities.FileNotificationAdhocRecipient>
{
}

public class NotificationProfileMapper : AnotherDifferentTypeOfDapperClassMapper<Domain.Entities.NotificationProfile>
{
}

실제 맵핑 코드는 별도의 맵퍼에 존재합니다 (나는 AnotherDifferentTypeOfDapperClassMapper를 보여주지 않았지만 아래와 비슷합니다)

public class PrefixDapperTableMapper<T> : ClassMapper<T> where T : class
{
    public PrefixDapperTableMapper()
    {
        AutoMap();
    }

    //name or schema manipulations in some overrides here. 
}

동일한 어셈블리에있는 한 DapperExtensions가 해당 어셈블리를 찾아서 사용하거나 다음과 같은 코드로 매핑 어셈블리를 설정할 수 있습니다.

DapperExtensions.DapperExtensions.SetMappingAssemblies({ typeof(ProfileMapper ).Assembly })


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow