【发布时间】:2012-03-25 19:52:28
【问题描述】:
我的问题假设简单插入到没有相关关系的表中。
// various unrelated operations w/context...
var one = new DbRecord();
var two = new DbRecord();
var thr = new DbRecord();
context.DbRecords.Add(one);
context.DbRecords.Add(two);
context.DbRecords.Add(thr);
// various unrelated operations w/context...
context.SaveChanges();
在这种情况下,我的 DbRecord 实体总是会按照我将它们添加到 DbSet 的顺序插入吗?他们似乎在我的测试中,但我可以依赖这个吗?
“各种不相关的操作”是指对同一上下文的不同的、不相关的 DbSet 上的操作;插入、删除和更新实体(在我的例子中是 POCO)
我希望它们以准确的顺序插入,以便我可以使用 pk/identity 字段进行排序,但我还需要利用上下文围绕我的 context.SaveChanges() 提供的隐式事务。尽管就数据库架构而言,其他操作不相关,但条目本身本质上是有关正在执行的更新的日志条目,它们的顺序很关键。
如果上下文不能保证以相同的顺序插入记录,我将不得不在记录中添加一个日期时间字段,并自己处理回滚。
【问题讨论】:
-
为什么?数据库本身没有“插入顺序”之类的东西......在查询中使用 ORDER BY。
-
@Henk 我可能最终会使用日期时间字段并对其进行排序。尝试查看是否可以按身份/pk 字段排序。
-
@Henk:数据库当然有插入顺序的概念。当您有一个标识列时,该列的值本质上是插入的顺序。然后,您可以按该列排序,并按插入顺序接收记录。
-
@AndrewBarber 这个链接social.msdn.microsoft.com/Forums/en-US/… 似乎表明它们没有按确切的顺序插入
-
@AndrewBarber 还看到了 2009 年 EF 的 Alex James 项目经理的回答,他说他们不保留订单stackoverflow.com/questions/921442/…
标签: c# entity-framework dbcontext entity-framework-4.3