如何使用EntityFramework更快地向MySQL添加行?

时间:2016-12-07 19:02:29

标签: c# mysql .net database entity-framework

我有一个async Task SaveQueue() { for (;;) { try { await Task.Delay(7500); dbUpload.Visibility = Visibility.Visible; dbUploadProgress.Value = 0; var q = new ObservableCollection<Picture>(manager.Queue.ToList().AsEnumerable()); manager.Queue.Clear(); var imgcount = q.Count(); using (var pc = new PicsContext()) { for (int i = 0; i < imgcount; i++) { var tags = q[i].GetTags(); try { pc.Sites.Attach(q[i].Site); // I'm actually not sure how to use this. } catch { } var curUrl = q[i].Url; if (pc.Pictures.FirstOrDefault(o => o.Url == curUrl) != null) { await Task.Delay(1); dbUploadProgress.Value = (i + 1) / (double)imgcount; dbUploadText.Text = "Skipping images..."; continue; } foreach (var t in tags) { var tag = pc.Tags.Where(o => o.Name == t).FirstOrDefault(); if (tag == null) { tag = new ViewModel.Tag(t); } q[i].Tags.Add(tag); } pc.Pictures.Add(q[i]); try { await pc.SaveChangesAsync(); } catch { } dbUploadProgress.Value = (i + 1) / (double)imgcount; var labelText = string.Format("{0}/{1} ({2:0.00}%)", i, imgcount, dbUploadProgress.Value); dbUploadText.Text = labelText; #if DEBUG System.Diagnostics.Debug.WriteLine(labelText); #endif await Task.Delay(2); } } q.Clear(); MainWindow.AddLog(string.Format("Saved {0} pictures.", imgcount)); dbUpload.Visibility = Visibility.Collapsed; await Task.Delay(1500); } catch(Exception ex) { AddLog(ex.Message); if (ex.InnerException != null) AddLog(ex.InnerException.Message); } if (stopped) break; } } 任务,用于将图像保存到数据库中:

Queue

它通常可以节省大约80-100图像/分钟,这是不可接受的,因为在大多数情况下Tags存储2500-10000个对象。这使得使用起来非常不方便。

我认为发生这种情况是正确的,因为我分别保存了每一行吗?还需要一段时间来检查Duplicate表中是否存在标记。

我这样做的原因是我必须经常检查图像标签。我必须确保标签已经存在,因为如果有,我添加它,它会抛出Site异常并且不保存图像。这也意味着我必须在检查标签是否存在之前保存以前的帖子数据,否则它可能无法检测到刚刚添加的标签,多次添加标签并发生相同的结果。

有没有办法让它自动保存不在数据库中的标签,只是让它指向这些标签?这意味着我可以立即保存整个列表,而不是单独发送每个图像。

另外,我正在使用另一个上下文将Image添加到数据库中。当我尝试使用此任务添加一些图像时,它会抛出一个错误,表明该站点已经在数据库中。出于某种原因,每次添加.Attach()时它都会继续尝试插入网站。添加{{1}}调用部分解决了这个问题,但我不确定它是如何工作的。我知道我做错了什么,因为它偶尔抛出一个异常并且没有附加图像的网站。我该如何优化呢?

感谢您的阅读,欢呼!

0 个答案:

没有答案