目录数据库
开个贴,专门记录使用EF Core遇到的问题,之后本身用.net写东西,操做数据库就使用EF Core了c#
我须要导入600多个csv文件,批量导入不会弄,网上也没查.net
使用了读取再存储的方法code
能够看下面的代码每一行存一次,这种方法的速度差很少是每秒400多条数据的样子ci
foreach (var csvName in 600个文件) { foreach (var 每一行 in 全部行) { using (var context = new MyContext()) { context.dGKs.Add(dGK); context.SaveChanges(); } } }
我感受是using (var context = new MyContext())这个的问题,由于using括号内就是一次对数据库的连接和释放,因此我把代码改为下面这样了,结果大跌眼镜it
using (var context = new MyContext()) { foreach (var csvName in 600个文件) { foreach (var 每一行 in 全部行) { context.dGKs.Add(dGK); context.SaveChanges(); } } }
上面这样,我觉得只有一次的连接释放会快一点,没想到更慢了,方法1每秒400多条数据,方法2这样每秒只有几十条,真的慢class
通过方法2,我又想了,屡次add,而后一次SaveChanges,这样会不会快一点?代码又改为了下面这样foreach
using (var context = new MyContext()) { foreach (var csvName in 600个文件) { foreach (var 每一行 in 全部行) { context.dGKs.Add(dGK); } context.SaveChanges(); } }
这样的结果也很很差,首先半天没反应,有反应了数据库忽然出现几万条数据,这和方法1每秒400条/s的速度也差很少啊csv
缺点还有:方法
因此,根据以上两个缺点,方法3也不好劲
因此,我最后仍是改成了方法1
问题描述,有一个字段是字符类型的,例如: "12.123","None"
我想判断这个字段是否是数字,不是数字的话直接改成"0",由于数据库里面的字段直接设定的Decimal类型
而后,我脑残的使用了try catch,仍是在using内部使用的,以下
using (var context = new MyContext()) { try{ dgk.aaa = int.Prase(dgk.aaa).toString(); } catch{ dgk.aaa = "0"; } context.dGKs.Add(dGK); context.SaveChanges(); }
速度真的是超级慢了,每秒才30多条数据,慢死,catch真的耗时间
因此我换成了正则,话说,我一直不会正则
using (var context = new MyContext()) { if (!Regex.IsMatch(dGK.aaa, @"^\d+\.\d+$")) { dGK.aaa = "0"; } context.dGKs.Add(dGK); context.SaveChanges(); }
换了正则以后和方法1差很少了,每秒400多条