目录
开个贴,专门记录使用EF Core遇到的问题,以后自己用.net写东西,操作数据库就使用EF Core了
我需要导入600多个csv文件,批量导入不会弄,网上也没查
使用了读取再存储的方法
可以看下面的代码每一行存一次,这种方法的速度差不多是每秒400多条数据的样子
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括号内就是一次对数据库的链接和释放,所以我把代码改成下面这样了,结果大跌眼镜
using (var context = new MyContext())
{
foreach (var csvName in 600个文件)
{
foreach (var 每一行 in 所有行)
{
context.dGKs.Add(dGK);
context.SaveChanges();
}
}
}
上面这样,我以为只有一次的链接释放会快一点,没想到更慢了,方法1每秒400多条数据,方法2这样每秒只有几十条,真的慢
经过方法2,我又想了,多次add,然后一次SaveChanges,这样会不会快一点?代码又改成了下面这样
using (var context = new MyContext())
{
foreach (var csvName in 600个文件)
{
foreach (var 每一行 in 所有行)
{
context.dGKs.Add(dGK);
}
context.SaveChanges();
}
}
这样的结果也很不好,首先半天没反应,有反应了数据库突然出现几万条数据,这和方法1每秒400条/s的速度也差不多啊
缺点还有:
所以,根据以上两个缺点,方法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多条
原文:https://www.cnblogs.com/yunquan/p/11581916.html