enum + sqlserverでのエラー・マッピング・ダッパー

c#-4.0 dapper mapping sqlclient sql-server-2008-r2

質問

私にはクラスがあります:

   public class Member
{
    #region public property

    public int Id { get; set; }
    public string LastName { get; set; }
    public string FirstName { get; set; }
    public string Email { get; set; }
    public string Password { get; set; }
    public string Mobile { get; set; }
    public string Fax { get; set; }
    public string OtherPhone { get; set; }
   ==> public AccountState AccountState { get; set; }
    public byte SiteId { get; set; }
    public int? GodFatherId { get; set; }

}

このクラスでは、私は列挙型のpublic enum AccountState { NotActivated = 0, Activated = 1, Desactived = 2, BlackListed = 3, ActivatedWithoutMailInvitation = 5 }

データベースへのアクセス:私はこのクラスを使用しています:

  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;
    }
}

私のリポジトリは次のようにdbcontextを呼び出します:

public Member GetMemberId(int memberId, IDbTransaction transacion = null)
        {
            var memberResult = _dbContext.ExecuteProcedure<Member>(MemberProcedures.P_Select, new { MemberId = memberId }).SingleOrDefault();
            return memberResult;
        }
        public void SaveMember(Member memberToSave, IDbTransaction transacion = null)
        {
            _dbContext.ExecuteProcedure(MemberProcedures.P_AddMember,
                new
                {
                    LastName = memberToSave.LastName,
                    FirstName = memberToSave.FirstName,
                    InitialEmail = memberToSave.Email,
                    Password=memberToSave.Password,
                    Email=memberToSave.Email,
                    Mobile=memberToSave.Mobile,
                    Fax=memberToSave.Fax,
                    OtherPhone=memberToSave.OtherPhone,
                    AccountStateId = (int)memberToSave.AccountState,
                    BirthDate = memberToSave.BirthDate,
                    Civility = memberToSave.Civility
                });
        }

私のテストクラスでは、私はデータベースにメンバーを追加する

  Member memberToInsert = new Member()
            {
                Civility = "Monsieur",
                Email = "xxxxxx@yopmail.com",
                Password = "password",
                FirstName = "xxxx",
                LastName = "xxx",
                Site = new Site() { Id = 1 },
                BirthDate = new DateTime(1988,02,02),
                AccountState = AccountState.Activated,
                GodFatherId = 1
            };

            _memberRepository.SaveMember(memberToInsert);

メンバはaccountstate=1データベースに保存されます。

しかし、私は実行する:

Member memberGetted = _memberRepository.GetMemberId(1824);

私はaccount.state = desactivated(値0)とmemeberを取得msssでexexutedストアドプロシージャは正しいと、 accountstate=1

任意のソリューションは、列挙型の正しい値でaccountstateをマップしてくださいか?

受け入れられた回答

それは私にマッピング問題のように見えます。

C#でのデフォルトの列挙型があるinttinyintにマップCLRの種類byteあなたが変更する必要がありますいずれかのように、 enumbyteまたはサーバーのデータはそれに応じて入力し、SQLを変更してください。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow