实体框架确保按顺序插入对象

时间:2015-11-17 20:04:24

标签: c# sql-server entity-framework-6

我的数据库中有一个表格规则。我插入如下规则:

Rule[] rulesToInsert = // some array of rules to insert

using(var db = new MyEntities())
{
     foreach(var rule in rulesToInsert)
         db.Rules.Add(rule);
     db.SaveChanges();
}

当我稍后检索我刚刚添加的规则时,我注意到它们的顺序不同。按照我添加的顺序检索它们的最佳方法是什么?每次添加新规则时都应该拨打db.SaveChanges()吗?或者我应该添加一个名为SortOrder的新列? 为什么这些项目没有按我添加的顺序添加?

修改

id是一个guid(字符串),因为一个规则可以有其他规则。换句话说,我正在创建一个树结构。 (规则表有自己的外键)。当我使用主键作为整数并且它自动增量时,它崩溃了,所以我只使用了一个guid。我想我会添加一个名为排序顺序的单独列。

2 个答案:

答案 0 :(得分:5)

表格具有排序顺序(不保证新行可以添加到结尾或任何其他位置)。以任何特定顺序检索行的唯一安全方法是使用Order by进行查询 所以是的,您需要添加SortOrder列。 (可以将其设置为identity列。)

答案 1 :(得分:-1)

如果您希望按照在foreach语句中添加项目的顺序插入项目,则必须进行折衷,在每次迭代中调用db.SaveChanges。< / p>

foreach(var rule in rulesToInsert)
{
    db.Rules.Add(rule);
    db.SaveChanges();
}

我说这是妥协,因为对于您必须插入的每条规则,您必须往返数据库,而不是做只有原始代码中的一次往返。

一种可能的解决方法,就是在数据库的相应表中添加一个额外的列,它将保存订单信息。如果这样做,您可以在规则对象中添加一个属性并重构一下代码。然后你会得到预期的结果。