Эту проблему сложно воспроизвести, и она появится только после миллионов запросов. Конечно, это может быть не так много, здесь не так много регулярности. Поэтому я только что загрузил код, и вы, возможно, не сможете его воспроизвести.
Чтобы перехватить журнал, я переписал SingleById
public T SingleById( int id)
{
var result = Db.SingleById<T>(id);
if (result == null || result.Id != id)
{
var first = result.ToIndentedJson();
result = Db.SingleById<T>(id);
if (result == null || result.Id != id)
{
result =Db.SingleById<T>(id);
if (result != null)
{
LogQueryError(first,result, 2);
}
}
else
{
LogQueryError(first, result, 1);
}
}
return result;
}
public static readonly Logger LoggerMustDeal = LogManager.GetLogger("MustDeal");
public void LogQueryError(string first, IEntityBase entityBase, int level = 1)
{
StackTrace st = new StackTrace(true);
var frames = st.GetFrames();
foreach (var sf in frames)
{
if (System.Diagnostics.StackFrame.OFFSET_UNKNOWN == sf.GetILOffset()) break;
var fileName = sf.GetFileName();
if (sf.GetMethod() == null || (!fileName.IsNullOrEmpty() && !fileName.Contains("LastOne")))
{
break;
}
var str =
$"{fileName} {sf.GetMethod().Name} {sf.GetFileLineNumber()} {sf.GetFileColumnNumber()}";
LoggerMustDeal.Error($"sqlserver error {str}");
}
LoggerMustDeal.Error($"sqlserver error first data {first}");
LoggerMustDeal.Error($"sqlserver error times {level} {entityBase.ToIndentedJson()} {Db.ConnectionString}");
var spId = Db.Single<int>("select @@SPID");
LoggerMustDeal.Error($"spid:{spId}");
}
, теперь идентификатор журнала = 219 - это правильный результат, это только что произошло в производственной среде. И как ни странно, @@ SPID возвращает 0 или выдает исключение. Входная строка не была в правильном формате. Также как select @@ spid int, но вернуть varchar
2020-04-27 16:28:34.9112 ERROR sqlserver error first data {
"Name": "",
"StartTime": "0001-01-01T00:00:00",
"EndTime": "0001-01-01T00:00:00",
"ActivityType": 0,
"ActivityRangeType": 0,
"IsOpen": false,
"ActivityFlag": null,
"Timer": 0,
"State": 2,
"Id": 3,
"Delstatus": false,
"AddTime": "2020-02-04T18:36:03.883",
"UpdateTime": "2020-04-27T10:04:13.713",
"MallId": 1
}
2020-04-27 16:28:34.9112 ERROR sqlserver error times 1 {
"Name": "test",
"StartTime": "2020-04-18T00:00:00",
"EndTime": "2020-04-19T00:00:00",
"ActivityType": 1,
"ActivityRangeType": 1,
"IsOpen": true,
"ActivityFlag": "test",
"Timer": 0,
"State": 2,
"Id": 219,
"Delstatus": false,
"AddTime": "2020-04-13T17:38:48.83",
"UpdateTime": "2020-04-13T17:38:48.83",
"MallId": 15
} server=xxxx;uid=xxxx;pwd=xxxx;database=xxxx;max pool size=40000;Pooling=true;