自己orm框架的一个旷世大BUG!自己都恶心死了。
错误的现象是空指针,在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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述