繁体   English   中英

在Entity Framework 6中的foreach循环中更新记录

[英]Updating records in foreach loop in Entity Framework 6

我在foreach循环中更新记录时遇到问题。 我有一种从SQL Table导出文件并将其保存在网络共享中的方法:

    public static void SyncOpportunity()
    {
        using (var ctx = new BPMOnline74Entities())
        {
            logger.Debug("Importing files from Opportunities.");
            var oppFiles = from o in ctx.OpportunityFile
                           where SqlFunctions.DataLength(o.Data) > 0 && o.ServiceProcessed == false
                           select o;

            foreach (OpportunityFile opp in oppFiles)
            {
                logger.Debug(string.Format("{0} is being imported.", opp.Name));
                string fileName="";
                if (opp.OpportunityId == null)
                {
                    fileName = "E:\\BPM\\Opportunity\\";
                    logger.Error("File not bound to any DB object. Saved in E:\\BPM\\Opportunity.");
                }
                else
                {
                    try
                    {
                        fileName = PathInfo.GetPath("Opportunity", (Guid)opp.OpportunityId);
                    }
                    catch (Exception ex)
                    {
                        logger.Error(ex.Message.ToString());
                    }
                }
                try
                {
                    File.WriteAllBytes(fileName + opp.Name, opp.Data);
                    logger.Debug(string.Format("{0} was exported from SQL.", opp.Name));
                    opp.ServiceProcessed = true;
                    ctx.Entry(opp).State = System.Data.Entity.EntityState.Modified;
                    ctx.SaveChanges();
                }
                catch(Exception ex)
                {
                    logger.Error(ex.Message.ToString());
                }
            }
            logger.Debug(string.Format("Imported {0} files.", oppFiles.Count().ToString()));
        }
        logger.Debug("Disposing SyncOpportunity.");
    }

从SQL成功导出文件后,我想将记录的“ ServiceProcessed”字段更新为true,以便在我的服务的下一次迭代中不会选择该文件。 问题是我的方法不会更新数据库,并且总是“捕获”我的所有记录。

如评论中所述,由于Entity Framework上下文(内部)采用工作单元模式,因此仅完成所有项目修改之后才需要调用SaveChanges()一次。

有关MSDN的更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM