在我的代码中,我需要对许多不同的邮政编码执行操作,每个操作最多可能需要几秒钟,并且可能包含数千个需要处理的邮政编码。我需要能够跟踪它并重新启动它,如果它因任何原因被终止。
我有想法创建一个像这样的搜索实体:
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; }
}
我无法弄清楚如何跟踪它。我的第一个想法是在每次成功操作之后从PostCode
中的集合中删除Search
并保存它以便每次加载对象时它只有未经处理的邮政编码,但是当我这样做时它抛出一个异常。
像这样:
using (var db = new MyDbContext())
{
foreach (var pc in search.PostCodes)
{
DoSomeStuff(pc);
search.PostCodes.Remove(pc);
db.SaveChanges();
}
}
我理解这是因为我无法更改我所枚举的对象,但出于某种原因,我无法想到一种简单的非复杂方式来跟踪数据库中的搜索。此外,由于有数千个邮政编码,我在这里也关注性能。
有谁能建议我应该如何跟踪搜索?
*编辑*
那么,如果我跟踪completed
属性中处理的数字,这会正常工作吗?
using (var db = new MyDbContext())
{
foreach (var pc in search.PostCodes.Skip(search.Completed))
{
DoSomeStuff(pc);
search.Completed ++;
db.SaveChanges();
}
}
如果我保存然后使用Entity Framework加载实体,它是否始终保持IEnumberale的顺序相同?
**另一个编辑**
这是我在实际代码中加载搜索对象的地方:
rs = db.RadarSearches.Include("PostCodes").FirstOrDefault(x => x.Keyword.Value == keyword && x.Complete == false);
我想如果我在这里执行订购,那么我可以使它保持一致。如何订购嵌套的PostCodes
集合?
答案 0 :(得分:0)