2017-05-22 1 views
0

Utiliser Dapper pour enregistrer des données qui est décimal qui est censé entrer dans un champ d'argent AlwaysEncrypted entraîne cette erreur:Dapper conversion C# décimal en décimal SQL au lieu d'argent (toujours Encrypted)

choc de type Opérande: décimal (5,1) crypté avec (...) est incompatible avec l'argent crypté avec (...)

Comment dites-vous explicitement à Dapper d'utiliser l'argent comme le type C# Décimal < -> L'argent est le préféré cartographie?

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

colonne Détails:

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

http://stackoverflow.com/questions/582797/should-you-choose-the-money-or-decimalx-y-datatypes-in-sql-server –

Répondre

0
SqlMapper.AddTypeMap(typeof(decimal), DbType.Currency); 

a remplacé le mappage par défaut de décimales pour DbType.Decimal éliminer la source du problème.