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

本文关键字:插入 对象 顺序 框架 确保 实体 | 更新日期: 2023-09-27 18:22:20

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

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。我想我会添加一个单独的列,称为排序顺序。

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

表有排序顺序(不能保证将新行添加到末尾或任何其他位置)。以任何特定顺序检索行的唯一安全方法是使用Order by进行查询
因此,是的,您将需要添加一个SortOrder列。

如果希望按照在foreach语句中添加项目的顺序插入项目,则必须做出big折衷,以便在每次迭代中调用db.SaveChanges

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

我认为这是一个大的折衷方案,因为对于您必须插入的每个规则,您必须往返数据库,而不是像原始代码中那样只往返一次。

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