使用实体框架6在多个记录上创建CreateOrUpdate操作

时间:2015-02-15 05:02:50

标签: entity-framework

我正在编写一个有趣的网络抓取工具。

我有一个远程SQL数据库,我想保存有关我访问的每个页面的信息,我正在使用Entity Framework 6来保存数据。为了便于说明,我们假设我想要保存每页的唯一数据是我最后一次访问它。

更新此数据库非常慢。这是我想要快速操作的操作:

  1. 对于当前页面,检查数据库中是否存在
  2. 如果已存在,请更新记录中的“lastVisited”时间戳字段并保存。
  3. 如果它不存在,请创建它。
  4. 目前我每分钟只能进行300次更新。我的SQL服务器实例几乎没有显示任何活动,因此我假设我是客户端绑定的。

    我的代码很天真:

    public static void AddOrUpdatePage(long id, DataContext db)
        {
            Page p = db.Pages.SingleOrDefault(f => f.id == id);
    
            if (p == null)
            {   
                // create
                p = new Page();
                p.id = id;
                db.Pages.Add(p);
            }
    
            p.lastSeen = DateTime.Now;
    
            db.SaveChanges();
        }
    

    我抓取一堆页面(1000s),然后在每个页面的循环中调用AddOrUpdatePage。

    似乎获得更多速度的方法是批处理?在给定一组页面ID的情况下,一次从我的数据库中获取1000条记录的最佳方法是什么?在SQL中,我会使用表变量和连接,或者使用冗长的IN子句。

0 个答案:

没有答案