我的错误描述:
ParseMsg方法失败, eqno=采集器序号9, channelno=00018B57,错误:The database operation was expected to affect 1 row(s), but actually affected 0 row(s); data may have been modified or deleted since entities were loaded. See http://go.microsoft.com/fwlink/?LinkId=527962 for information on understanding and handling optimistic concurrency exceptions.
有道翻译:
数据库操作预计影响1行,但实际影响0行; 自实体加载以来,数据可能已被修改或删除。 有关理解和处理乐观并发异常的信息,请参阅http://go.microsoft.com/fwlink/?LinkId=527962。
以上错误是我的 IDistributedEventHandler 实现类TahmEventHandler(用来消费mqtt的消息内容)的消息订阅事件 HandleEventAsync中,因为给服务器发送消息很快,执行的消息数据解析业务方法,执行数据操作时报出的错误。
代码如下图所示,根据abp官网示例代码,本来应该继承ITransientDependency 但是用这个生命周期会报错LifetimeScope(原因我还没搞明白) ,所以我用ISingletonDependency来测试,然后用mqttx客户端使劲给服务器发送消息,我的业务系统就抛出了上面的错误。
![](https://img-blog.csdnimg.cn/img_convert/d2d612ddf0df438f8bbb0ccd39bcfee5.png)
根据网上查得的资料,是EF处理并发数据时产生的异常,由此可以得出结论,单例模式无法解决并发业务问题。