EF Core使用遇到的问题
开个贴,专门记录使用EF Core遇到的问题,以后自己用.net写东西,操作数据库就使用EF Core了
EF Core速度问题
问题描述
我需要导入600多个csv文件,批量导入不会弄,网上也没查
使用了读取再存储的方法
EF使用方法1,每一行存储一次(400条/s)
可以看下面的代码每一行存一次,这种方法的速度差不多是每秒400多条数据的样子
foreach (var csvName in 600个文件)
{
foreach (var 每一行 in 所有行)
{
using (var context = new MyContext())
{
context.dGKs.Add(dGK);
context.SaveChanges();
}
}
}
EF使用方法2,链接不释放 (40条/s)
我感觉是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这样每秒只有几十条,真的慢
EF使用方法3,多次add,一次SaveChanges(400条/s,但是数据库操作异常慢)
经过方法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
- 如果文件很大,我所有的行都add到一起,如果是70万条数据呢,据说EF Core最大1000条数据,再大就很慢了
所以,根据以上两个缺点,方法3也很差劲
所以,我最后还是改为了方法1
using内部千万不要使用try catch
问题描述,有一个字段是字符类型的,例如: "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多条
EF Core使用遇到的问题的更多相关文章
- EF Core 数据库迁移(Migration)
工具与环境介绍 1.开发环境为vs 2015 2.mysql EF Core支持采用 Pomelo.EntityFrameworkCore.MySql 源代码地址(https://github. ...
- Asp.net Core 通过 Ef Core 访问、管理Mysql
本文地址:http://www.cnblogs.com/likeli/p/5910524.html 环境 dotnet Core版本:1.0.0-preview2-003131 本文分为Window环 ...
- EF Core 杂记
本系列文章,将介绍本人在学习和使用EF Core的过程中的收获与心得. 或许有的地方讲的错误 欢迎大家批评指出. 1.EF Core 数据库迁移(Migration)
- MySQL官方.NET Core驱动已出,支持EF Core
千呼万唤始出来MySQL官方.NET Core驱动已出,支持EF Core. 昨天MySQL官方已经发布了.NET Core 驱动,目前还是预览版,不过功能已经可用. NuGet 地址:https:/ ...
- EF Core 1.0 和 SQLServer 2008 分页的问题
EF Core 1.0 在sqlserver2008分页的时候需要指定用数字分页. EF Core1.0 生成的分页语句中使用了 Featch Next.这个语句只有在SqlServer2012的时候 ...
- EntityFramework Core技术线路(EF7已经更名为EF Core,并于2016年6月底发布)
官方文档英文地址:https://github.com/aspnet/EntityFramework/wiki/Roadmap 历经延期和更名,新版本的实体框架终于要和大家见面了,虽然还有点害羞.请大 ...
- EF Core CodeFirst实践 ( 使用MS SqlServer)
这里使用 MS SQLSERVER ,网上大多使用 SQLite 先来一个CodeFirst 新建项目 这里我们选择 ASP.NET Core Web Application (.NET Core) ...
- ASP.NET Core 开发-Entity Framework (EF) Core 1.0 Database First
ASP.NET Core 开发-Entity Framework Core 1.0 Database First,ASP.NET Core 1.0 EF Core操作数据库. Entity Frame ...
- ASP.NET Core 开发 - Entity Framework (EF) Core
EF Core 1.0 Database First http://www.cnblogs.com/linezero/p/EFCoreDBFirst.html ASP.NET Core 开发 - En ...
- 再谈EF Core内存数据库单元测试问题
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:在用EF Core的内存数据库进行单元测试的时候遇到"无法访问已释放的对象& ...
随机推荐
- 图像处理中Stride和Width的关系
一行有 11 个像素(Width = 11), 对一个 32 位(每个像素 4 字节)的图像, Stride = 11 * 4 = 44. 但还有个字节对齐的问题, 譬如: 一行有 11 个像素(Wi ...
- Beta冲刺(7/7)——2019.5.28
所属课程 软件工程1916|W(福州大学) 作业要求 Beta冲刺(7/7)--2019.5.28 团队名称 待就业六人组 1.团队信息 团队名称:待就业六人组 团队描述:同舟共济扬帆起,乘风破浪万里 ...
- hive中时间操作(二)
转:https://blog.csdn.net/qq646748739/article/details/77997276 --Hive中日期函数总结:--1.时间戳函数--日期转时间戳:从1970-0 ...
- 热修复技术沉思:jspatch
硬修复: 直接修改工程源码,重新发版: 冷修复: 打补丁包,使用动态库和hook技术,在程序启动时完成问题代码修复:案例:iOS逆向工程: 特征:不修改原始代码.补丁发布.目前不支持动态发布: 热修复 ...
- 20181107 模拟赛T1:快乐传递政治正确版
问题描述 David 有很多好朋友.有些期末季刚结束,有些人很快乐,但有些不太快乐,David 想把快乐传递给每个人,作为心理学大师,他准备了如下计划:David 的朋友中有 n 个男生和 m 个女生 ...
- 中心极限定理(Central Limit Theorem)
中心极限定理:每次从总体中抽取容量为n的简单随机样本,这样抽取很多次后,如果样本容量很大,样本均值的抽样分布近似服从正态分布(期望为 ,标准差为 ). (注:总体数据需独立同分布) 那么样本容量n应 ...
- 应用Synopsys Synplify 综合的注意一个问题
在Xilinx ISE中使用Synopsys Synplify综合时,注意约束文件*.ucf需在当前工程的文件夹下.不要将其它文件夹下的同名文件的约束当成当前工程下文件的约束.
- java 中类初始化,构造方法,静态成员变量,静态块的加载顺序
1.编译和运行概念要搞清:编译即javac的过程,负责将.java文件compile成.class文件,主要是类型.格式检查与编译成字节码文件,而加载是指java *的过程,将.class文件加载到内 ...
- HTML引入外部JS文件
<!--引入外部文件的方式--> <script type="text/javascript" src="attack.js">< ...
- ~/.ssh/config文件的使用
Host github-A HostName github.com User git IdentityFile /Users/xxx/.ssh/id_rsa_A IdentitiesOnly yes ...