forked from Giorgi/EntityFramework.Exceptions
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMySQLExceptionClassifier.cs
More file actions
68 lines (57 loc) · 1.91 KB
/
MySQLExceptionClassifier.cs
File metadata and controls
68 lines (57 loc) · 1.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
using System.Data.Common;
using DbExceptionClassifier.Common;
#if POMELO
using MySqlConnector;
namespace DbExceptionClassifier.MySQL.Pomelo;
#else
using MySql.Data.MySqlClient;
namespace DbExceptionClassifier.MySQL;
#endif
public class MySQLExceptionClassifier : IDbExceptionClassifier
{
private static MySqlErrorCode GetErrorCode(DbException dbException)
{
if (dbException is not MySqlException mySqlException)
{
return MySqlErrorCode.None;
}
#if POMELO
return mySqlException.ErrorCode;
#else
return (MySqlErrorCode)mySqlException.Number;
#endif
}
public bool IsReferenceConstraintError(DbException exception)
{
var errorCode = GetErrorCode(exception);
return errorCode is MySqlErrorCode.NoReferencedRow or
MySqlErrorCode.RowIsReferenced or
MySqlErrorCode.NoReferencedRow2 or
MySqlErrorCode.RowIsReferenced2;
}
public bool IsCannotInsertNullError(DbException exception)
{
var errorCode = GetErrorCode(exception);
return errorCode == MySqlErrorCode.ColumnCannotBeNull;
}
public bool IsNumericOverflowError(DbException exception)
{
var errorCode = GetErrorCode(exception);
return errorCode == MySqlErrorCode.WarningDataOutOfRange;
}
public bool IsUniqueConstraintError(DbException exception)
{
var errorCode = GetErrorCode(exception);
return errorCode == MySqlErrorCode.DuplicateKeyEntry;
}
public bool IsMaxLengthExceededError(DbException exception)
{
var errorCode = GetErrorCode(exception);
return errorCode == MySqlErrorCode.DataTooLong;
}
public bool IsDeadlockError(DbException exception)
{
var errorCode = GetErrorCode(exception);
return errorCode is MySqlErrorCode.LockDeadlock or MySqlErrorCode.XARBDeadlock;
}
}