Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 跟踪长时间重复操作_C#_Entity Framework - Fatal编程技术网

C# 跟踪长时间重复操作

C# 跟踪长时间重复操作,c#,entity-framework,C#,Entity Framework,在我的代码中,我需要对许多不同的邮政编码执行一个操作,每个操作可能需要几秒钟,并且可能包括需要处理的数千个邮政编码。我需要能够保持跟踪,并重新启动它,如果它是出于任何原因终止 我的想法是创建一个搜索实体,如下所示: public class Search { public int ID { get; set; } public virtual ICollection<PostCode> PostCodes { get; set; } } public class Po

在我的代码中,我需要对许多不同的邮政编码执行一个操作,每个操作可能需要几秒钟,并且可能包括需要处理的数千个邮政编码。我需要能够保持跟踪,并重新启动它,如果它是出于任何原因终止

我的想法是创建一个搜索实体,如下所示:

public class Search
{
    public int ID { get; set; }
    public virtual ICollection<PostCode> PostCodes { get; set; }
}
public class PostCode
{
    public int ID { get; set; }
    public string Value { get; set; }
}
我明白这是因为我无法更改我正在枚举的对象,但出于某种原因,我想不出一种简单的非复杂方法来跟踪数据库中的搜索。此外,由于有上千个邮政编码,我在这里也关注性能

有人能建议我应该如何跟踪搜索吗

*编辑*

所以,如果我跟踪
completed
属性中处理的数字,这会正常工作吗

using (var db = new MyDbContext())
{
    foreach (var pc in search.PostCodes.Skip(search.Completed))
    {
        DoSomeStuff(pc);
        search.Completed ++;

        db.SaveChanges();
    }
}
如果使用实体框架保存并加载实体,它是否总是保持IEnumberale的顺序相同

**另一次编辑**

这是我在实际代码中加载搜索对象的地方:

rs = db.RadarSearches.Include("PostCodes").FirstOrDefault(x => x.Keyword.Value == keyword && x.Complete == false);
我想如果我在这里强制执行命令,那么我可以使它保持一致。如何订购嵌套的
邮政编码
集合

  • 将结果存储为数组并将该数组存储在文件中,以便可以继续(假设搜索结果可能在不同时间有所不同)。使用该文件,您需要将索引保存在您所在的位置。在进程恢复时,从文件和最后一个成功处理的索引加载数组
  • 您可以存储整个对象并删除成功处理的对象,但出于性能考虑,您只需每隔5或10次保存一次文件

  • 我需要将进度存储在数据库中。如果我保存对象并通过实体框架加载它,我是否可以保证IEnumberable的顺序相同?您可以在每次启动流程之前通过排序(如果允许)来确保。
    rs = db.RadarSearches.Include("PostCodes").FirstOrDefault(x => x.Keyword.Value == keyword && x.Complete == false);