SQLITE数据库防止savechange线程冲突的解决办法。

性能优先级低的情况下:

类方法中使用锁进行数据获取

private static object dblock = new object();
private static List<CarInfo> table_carInfos;
public static List<CarInfo> Table_carInfos
        {
            get
            {
                if (table_carInfos == null)
                {
                    table_carInfos = new List<CarInfo>();
                    lock (dblock)
                    {
                        table_carInfos = carinfoService.GetModels(p => true).ToList();
                    }
                }
                return table_carInfos;
            }
        }
 /// <summary>
        /// 查询车辆信息并信息数据库插入
        /// </summary>
        /// <param name="iOCards"></param>
        /// <param name="interfacelog"></param>
        public static void InsertCarinfos(List<CarInfo> carInfos, List<Interfacelog> interfacelogs)
        {
            if (carInfos.Count > 0)
            {
                lock (dblock)
                {
                    if (carinfoService.UpdateList(carInfos))
                    {
                        if (interfacelogService.loadDataOK(interfacelogs))
                        {
                            Table_carInfos.RemoveAll(p => carInfos.Select(p1 => p1.carID).Contains(p.carID));
                            Table_carInfos.AddRange(carInfos);
                            Table_interfacelogs.RemoveAll(p => interfacelogs.Select(p1 => p1.interfacelogID).Contains(p.interfacelogID));
                            Table_interfacelogs.AddRange(interfacelogs);
                        }
                    }
                }
            }
        }

通过锁 保证同一时间尽可能只有一个现场方法访问类中任意属性方法,保证此数据库的工具类在执行BLL层的数据库增删改操作时由于线程冲突引发的savechange()方法报错的问题。

外部执行数据库操作通过此工具类方法执行具体操作数据库操作。此工具类将各个service层的方法进行统一管理,防止各个线程调用service引发savechange的问题

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值