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
の文字列を無作法にハードコードしても、私はまだこの例外/エラーを受け取ります。
ご協力いただければ幸いです!