2016-07-08 6 views
1

2つのデータベーステーブルにまたがる新しいUserFingerprintModelを作成しようとしています。 1つはPaymentFingerprintであり、1つはPaymentFingerprintGrantです。私のサービス・テストのために、私はこれらの2つのSQLたstatments作成:'MySql.Data.MySqlClient.MySqlException'タイプの例外が発生しました

private const string _ADD_FINGERPRINT_QUERY = @" 
      INSERT INTO FinOps.PaymentFingerprint(
       CreateDate, 
       Fingerprint, 
       PaymentTypeId, 
       FingerprintTypeId 
      ) 
      VALUES (
       NOW(), 
       @pFingerprint, 
       @pPaymentTypeId, 
       @pFingerprintTypeId 
      ); SELECT LAST_INSERT_ID();"; 

をそしてFingerprintGrantを作成するために、私は `SELECT LAST_INSERT_IDを(説明fingerprintIdを)必要があります。」上記

をここに。ここで私は、その後MySqlConnectionを使用しようと

private const string _ADD_FINGERPRINT_GRANT_QUERY = @" 

      INSERT INTO FinOps.PaymentFingerprintGrant(
       PaymentFingerprintId, 
       CreateDate, 
       DepositLimit, 
       DepositLimitIntervalDays, 
       IsDeleted, 
       PaymentFingerprintStatusId, 
       UserId 
      ) 
      VALUES (
       @pPaymentFingerprintId, 
       NOW(), 
       @pDepositLimit, 
       @pDepositLimitIntervalDays, 
       @pIsDeleted, 
       @pPaymentFingerprintStatusId, 
       @pUserId 
     );"; 

私のコードは以下の通りです::。私のFingerprintGrant SQL文字列である

// Returns the last insert id 
     public int AddUserFingerprint (string fingerprint, int paymentTypeId, int fingerprintTypeId) 
     { 
      using (var conn = new MySqlConnection(_finopsConnection)) 
       return conn.Execute(_ADD_FINGERPRINT_QUERY, 
        new 
        { 
         pFingerprint = fingerprint, 
         pPaymentTypeId = paymentTypeId, 
         pFingerprintTypeId = fingerprintTypeId 
        }, commandType: CommandType.Text); 
     } 

public void AddUserFingerprintGrant(int paymentFingerprintId, DateTime createdDate, int depositLimit, int depositLimitInteveralDays, int isDeleted, int userId, int paymentFingerprintStatusId, string fingerprint, int paymentTypeId, int fingerprintTypeId) 
     { 
      using (var conn = new MySqlConnection(_finopsConnection)) 
       conn.ExecuteScalar(_ADD_FINGERPRINT_GRANT_QUERY, 
        new 
        { 
         pPaymentFingerprintId = AddUserFingerprint(fingerprint, paymentTypeId, fingerprintTypeId), 
         pDepositLimit = depositLimit, 
         pDepositLimitIntervalDays = depositLimitInteveralDays, 
         pIsDeleted = isDeleted, 
         pPaymentFingerprintStatusId = paymentFingerprintStatusId, 
         pUserId = userId 
        }, commandType: CommandType.Text); 
     } 

そして私は、私はサービスのテストを実行するときに[テスト]

public void TestGetFingerprintById() 
    { 
     HttpStatusCode status; 

     var userFingerprint = CreateRandomFingerprintGrant(); 
     var paymentFingerprintId = AddUserFingerprint(userFingerprint.Fingerprint, userFingerprint.PaymentTypeId, userFingerprint.FingerprintTypeId); 
     AddUserFingerprintGrant(paymentFingerprintId, userFingerprint.CreateDate, userFingerprint.DepositLimit, 
      userFingerprint.DepositLimitIntervalDays, userFingerprint.IsDeleted, userFingerprint.UserId, 
      userFingerprint.PaymentFingerprintStatusId, userFingerprint.Fingerprint, userFingerprint.PaymentTypeId, 
      userFingerprint.FingerprintTypeId); 


     var query = new GetFingerprintByIdQuery() 
     { 
      UserId = userFingerprint.UserId, 
      FingerprintId = paymentFingerprintId 
     }; 
     var resp = _hermesDriver.GetFingerprintInfoById(query, out status); 

    } 

は、しかし、私はこのエラーを取得する私のService Test

におけるこれらの2つの方法を呼び出す場所です:TestGetFingerprintById [0:01.608] Failed: MySql.Data.MySqlClient.MySqlException : Duplicate entry '1-3b590375-06d2-4923-a266-d98d44ab2b0f' for key 'idx_payment_type_fingerprint_uniq'

指紋私のヘルパーメソッドで生成されます:

public AddUserFingerprintModel CreateRandomFingerprintGrant() 
     { 
      var fingerprint = Guid.NewGuid().ToString(); 
      var userFingerprintDto = new AddUserFingerprintModel() 
      { 
       Fingerprint = fingerprint, 
       UserId = 100001, 
       IsDeleted = 0, 
       UpdatedDate = DateTime.Today, 
       PaymentTypeId = 1, 
       DepositLimit = 10000, 
       PaymentFingerprintGrantId = 100010, 
       Version = 1, 
       PaymentFingerprintStatusId = 1, 
       CreateDate = DateTime.Today, 
       FingerprintTypeId = 1, 
       DepositLimitIntervalDays = 5 
      }; 
      return userFingerprintDto; 
     } 

私は本当にありませんなぜこの例外が発生しているのか理解してください。私がfingerprintの文字列を無作法にハードコードしても、私はまだこの例外/エラーを受け取ります。

ご協力いただければ幸いです!

答えて

0

各行にすべての変数が設定されていることを確認してください。

関連する問題