上周我有一个错误,我试图重新创建。一段现有代码在数据库上进行了大规模插入。虽然,一个值不允许在数据库中重复旧代码在每个 AddObject 之后使用 SaveChanges 将更改持久化到数据库中。这表现得不是很好。因此,不是每次我在每 1000 条记录后保存它时都保存它(并在事务中执行此操作,但这与此示例无关)。
下面的代码概述了我所做的事情。
TestEntities test = new TestEntities();
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
string q = j.ToString();
if (!test.warehouses.Any(x => x.combi == q))
{
warehouse wh = new warehouse();
wh.combi = j.ToString();
wh.ean = j.ToString();
test.warehouses.AddObject(wh);
}
}
}
test.SaveChanges();
我不知道的是实体框架只查询数据库中的数据而不是待处理的数据,因此任何查询都不会在数据库上给出任何结果(我假设会有结果。)因此,这会导致不需要的在上面的代码中重复。
现在我解决了它将所有即将添加的对象存储在内存中,然后将它们存储在数据库中。这可行,但会在代码中产生很多开销。有没有办法解决这个问题?你能告诉 EF 处理数据库和未决的更改吗?所有的 ORM 都是这样工作的吗?
谢谢,帕特里克