【问题标题】:Dapper converting C# decimal to SQL decimal instead of money (Always Encrypted)Dapper 将 C# 十进制转换为 SQL 十进制而不是金钱(始终加密)
【发布时间】:2017-05-22 02:24:04
【问题描述】:

使用 Dapper 保存旨在进入 AlwaysEncrypted 货币字段的十进制数据会导致此错误:

操作数类型冲突:使用 (...) 加密的小数 (5,1) 与用 (...) 加密的钱不兼容

你如何明确告诉 Dapper 使用 money 作为 C# Decimal 的类型 Money 是首选映射?

decimal income = 4500m;
using (var connection = new ReliableSqlConnection(connectionString)) {
   try {
   connection.Open(); 
   connection.Query<int>(
    @"INSERT INTO [tablename]
           ([MonthlyAfterTaxIncome])
      VALUES
           (@MonthlyAfterTaxIncome);
      SELECT CAST(SCOPE_IDENTITY() as int)",
                        new {
                            MonthlyAfterTaxIncome = income
                        })
                    .FirstOrDefault();
              } finally {
                    connection.Close();
                }
            }

栏目详情:

 [MonthlyAfterTaxIncome] [money] ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [KeyName],         ENCRYPTION_TYPE = Deterministic, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL,) 

【问题讨论】:

    标签: c# dapper always-encrypted


    【解决方案1】:
     SqlMapper.AddTypeMap(typeof(decimal), DbType.Currency); 
    

    已将小数的默认映射替换为 DbType.Decimal,从而消除了问题的根源。

    【讨论】:

      猜你喜欢
      • 2017-07-31
      • 2013-07-20
      • 2012-06-17
      • 1970-01-01
      • 2012-04-19
      • 2011-07-28
      • 1970-01-01
      相关资源
      最近更新 更多