Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在DbContext.SubmitChanges()上保证插入行的顺序_Sql Server_Entity Framework Core - Fatal编程技术网

Sql server 在DbContext.SubmitChanges()上保证插入行的顺序

Sql server 在DbContext.SubmitChanges()上保证插入行的顺序,sql-server,entity-framework-core,Sql Server,Entity Framework Core,具有自动递增主键的给定记录表 将实体添加到DbContext时,如下所示: using (var dbContext = new MyDbContext()) { dbContext.Records.Add(new Record { TypeId = "TYPE1" }); dbContext.Records.Add(new Record { TypeId = "TYPE2" }); dbContext.Records.Add(new Record { TypeId = "TY

具有自动递增主键的给定记录表

将实体添加到DbContext时,如下所示:

using (var dbContext = new MyDbContext())
{
   dbContext.Records.Add(new Record { TypeId = "TYPE1" });
   dbContext.Records.Add(new Record { TypeId = "TYPE2" });
   dbContext.Records.Add(new Record { TypeId = "TYPE3" });
   dbContext.SaveChanges();
}
那么,我能指望记录的ID将以与我向DB上下文添加实体相同的顺序递增吗?

我想知道下面的查询以相同的顺序返回记录

var records = dbContext.Records.AsNoTracking().OrderBy(r => e.RecordId).ToList();
实体定义如下

public partial class Record
{

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Column(TypeName = "numeric(10, 0)")]
    public decimal RecordId { get; set; }

    [StringLength(8)]
    public string TypeId { get; set; }

    [ForeignKey(nameof(TypeId))]
    public RecordType Type {get; set;}
}

modelBuilder.Entity<Record>(entity =>
{
    entity.HasOne(record => record.Type)
          .WithMany(type => type.Records)
}
公共部分类记录
{
[数据库生成(DatabaseGeneratedOption.Identity)]
[列(TypeName=“numeric(10,0)”)]
公共十进制记录ID{get;set;}
[第(8)款]
公共字符串TypeId{get;set;}
[外键(名称(类型ID))]
公共记录类型类型{get;set;}
}
modelBuilder.Entity(Entity=>
{
entity.HasOne(record=>record.Type)
.WithMany(type=>type.Records)
}

*注意:我有一些查询,需要按照插入事件的相同顺序获取事件。我有时间戳,但如果记录是在单个事务中生成的,我需要额外的排序依据。

我不会,特别是在多用户环境中。不需要依赖于此。主键用于在选项卡中唯一定义一行le.它们不需要按顺序排列,也不需要按顺序排列。多用户环境与此有什么关系?我只关心我上下文中记录的顺序,我不介意在它们之间插入其他记录。我知道你希望标识为1,2,…按顺序排列。我不相信,但它确实如此。我不明白为什么会这样我认为每个人都应该依赖于顺序,也许你可以解释一下。如果你真的想确保PK按照你期望的顺序递增,我认为你最安全的方法是在它自己的事务中处理每个插入。如果在一个事务中有多个插入,那么SQL引擎将决定它们的提交顺序。如果您将标识列视为恰好适合数字列/变量的不透明blob。一切都会好起来。只要您想关心数字值,比较它们(除了相等)等,您就进入了危险的领域。如果顺序很重要,为什么不显式地用另一个属性/列对顺序建模?