错误的现象是空指针,在orm的list删除一个对象的时候发生的。
首先把所有项目都源代码都放在一起看,最后找到空指针的问题:
ormobject.removefromlist。产生了一个插数据库操作,但是这个操作的对象的uniquekey没有赋值,导致数据库错误,这个错误被log记录,但是log。。
(log里面由于select的时候没有把对方添加到内存,)
记录error 的时候,log开启了ip,导致空指针。
解决是解决了,可是为什么会出现插入数据库的操作?
removefromlist, 在aop里面会调用
proxyList = ObjConvertor.Instance.ObjListToProxyList(value as IList);
把输入参数转化为proxy
如果buffer没有对应的对象
,如果对象的proxy不存在,那么这个方法会自动创建一个proxy,这个时候就导致了插入数据库操作(sqlserver又会认为空的uk为重复,导致了log的出错)
找到问题了,那么问题就是,为什么对象的proxy不存在
select的bug,如果出现2个数据,select返回是null!!!
由于ormobj的list里面保存了2个对象的upk都是相同的,导致select的时候,返回2个结果,但是程序自动判断,返回null。导致了这个复杂的bug!!!!
又由于返回了null,proxy=null,但是aop没有判断空指针返回,因此再次传递给了proxytoobject,这个时候,object就有了空的proxy,导致了出错!
靠!!!!!!!!!!恶心到自己都想吐。。。这么垃圾的代码怎么可能是我写的。嗨。。。
现在还有另外一个大bug,在withdraw数据的时候,服务器报500错误,查看日志依然是违反了Unique约束,估计仍然是个bug