다른 이름과 유형을 가진 모델의 속성이있는 Dapper 매핑 열

dapper mapping sqlclient sql-server-2008-r2 stored-procedures

문제

이 모델은 다음과 같습니다.

 public class Member
    {
        #region public property

        public int Id { get; set; }
        public string LastName { get; set; }
        public string FirstName { get; set; }
        public AccountState AccountState { get; set; }
        public GodFatherType GodFatherType { get; set; }
}

AccountState 및 GodFatherType은 모두 두 가지입니다.

 public enum AccountState 
{
    NotActivated = 0,
    Activated = 1,
    Desactived = 2,

}

 public enum GodFatherType
    {
        Undefined=0,
        unknown = 1,
        Correct = 2,
    }

데이터베이스에서 ID, 성, FistName, TinyInt AccountstateId 및 smallint GodFatherTypeid가 있습니다. 저장 프로 시저를 변경하고 싶지 않습니다. 내 클래스 Member 를 데이터베이스에 매핑하는 방법은 무엇입니까?

실제로이 코드를 사용하여 저장 프로 시저를 실행할 때 Id, LastName, FistName 속성 만 가져옵니다.

 public sealed class DbContext : IDbContext
{
    private bool disposed;
    private SqlConnection connection;

    public DbContext(string connectionString)
    {
        connection = new SqlConnection(connectionString);
    }

    public IDbConnection Connection
    {
        get
        {
            if (disposed) throw new ObjectDisposedException(GetType().Name);

            return connection;
        }
    }

    public IDbTransaction CreateOpenedTransaction()
    {
        if (connection.State != ConnectionState.Open)
            Connection.Open();
        return Connection.BeginTransaction();
    }

    public IEnumerable<T> ExecuteProcedure<T>(string procedure, dynamic param = null, IDbTransaction transaction = null)
    {
        if (connection.State == ConnectionState.Closed)
        {
            connection.Open();
        }

        return Dapper.SqlMapper.Query<T>(connection, procedure, param, transaction,
            commandType: CommandType.StoredProcedure);
    }

    public int ExecuteProcedure(string procedure, dynamic param = null, IDbTransaction transaction = null)
    {
        if (connection.State == ConnectionState.Closed)
        {
            connection.Open();
        }

        return Dapper.SqlMapper.Execute(connection, procedure, param, transaction,
            commandType: CommandType.StoredProcedure);
    }

    public void Dispose()
    {
        Debug.WriteLine("** Disposing DbContext");

        if (disposed) return;

        if (connection != null)
        {
            connection.Dispose();
            connection = null;
        }

        disposed = true;
    }
}

수락 된 답변

가장 쉬운 방법은 1 : 1로 유지하는 것입니다.

public AccountState AccountStateId { get; set; }
public GodFatherType GodFatherTypeId { get; set; }

어디에

public enum AccountState : byte {...}
public enum GodFatherType : short {...}

속성의 이름을 바꿀 수 없으면 shim 속성을 추가하십시오.

private byte AccountStateId {
    get { return (byte)(int)AccountState; }
    set { return AccountState = (AccountState)(int)value; }
}

이지도에 회원의 이름을 변경하는 것도 가능하지만 더 복잡하다.



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