2016-07-08 3 views
1

Я пытаюсь создать новый UserFingerprintModel, который охватывает две таблицы базы данных. Один из них - от PaymentFingerprint, один - от PaymentFingerprintGrant. Для моих тестов службы, я создал эти два 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, мне нужно fingerprintId, что объясняет `ВЫБРАТЬ LAST_INSERT_ID();» выше

здесь. моя FingerprintGrant SQL строка:.

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 
     );"; 

тогда я пытаюсь использовать MySqlConnection Вот мой код ниже:

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

И это, когда я называю эти два метода в моей Service Test

[Test]

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

    } 

Однако, когда я запускаю тест службы, я получаю эту ошибку: 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

Убедитесь, что у вас есть все переменные для КАЖДОГО столбца.

Смежные вопросы