HTML5技术

Entity Framework Core 使用HiLo生成主键 - Sweet-Tang(2)

字号+ 作者:H5之家 来源:H5之家 2017-11-27 10:14 我要评论( )

这段代码将创建一个默认名称为“EntityFrameworkHiLoSequence”的新序列,因为没有指定名字。您也可以定义多个HiLo序列。例如: protected override void OnModelCreating(ModelBuilder modelbuilder){modelbuilder

这段代码将创建一个默认名称为“EntityFrameworkHiLoSequence”的新序列,因为没有指定名字。您也可以定义多个HiLo序列。例如:

protected override void OnModelCreating(ModelBuilder modelbuilder) { modelbuilder.ForSqlServerUseSequenceHiLo("DBSequenceHiLo"); modelbuilder.Entity<Category>() .Property(o => o.CategoryID).ForSqlServerUseSequenceHiLo(); }

在数据库中,将创建两个序列。Category实体将使用EntityFrameworkHiLoSequence序号,所有其它实体使用DBSequenceHiLo序列。

配置HiLo序列

ForSqlServerHasSequence扩展方法不能更改起始值和增量值的选项。但是,有一种方法来定义这些选项。首先,使用HasSequence方法定义序列的StartAt和IncrementBy选项,然后再使用ForSqlServerUseSequenceHiLo()扩展方法,要保持序列的名称一致。例如:

modelbuilder.HasSequence<int>("DBSequenceHiLo") .StartsAt(1000).IncrementsBy(5); modelbuilder.ForSqlServerUseSequenceHiLo("DBSequenceHiLo");

在这种情况下,生成DBSequenceHiLo的脚本如下。

CREATE SEQUENCE [dbo].[DBSequenceHiLo] AS [int] -GO

所以当我们执行相同的代码插入3个Category实体,那么主键的值将从1000开始。

而且由于IncrementBy选项设置为“5”,所以当在上下文中添加第6个插入时,将进行数据库调用以获得下一个序列值。以下是插入3个Category实体然后插入3个的Product实体时SQL Server profiler的屏幕截图,您可以看到数据库调用获取序列的下一个值的次数是2次。

如果您对在Entity Framework Core中使用HiLo生成主键感兴趣,不防自己动手测试一下。

参考资料:

  • https://vladmihalcea.com/2014/06/23/the-hilo-algorithm/
  •  

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • 使用AspectCore动态代理 - Lemon丶

      使用AspectCore动态代理 - Lemon丶

      2017-11-21 11:01

    • 极简版ASP.NET Core学习路径及教程 - 腾飞(Jesse)

      极简版ASP.NET Core学习路径及教程 - 腾飞(Jesse)

      2017-11-17 14:02

    • 讨论.NET Core 配置对GC 工作模式与内存的影响 - YOYOFx

      讨论.NET Core 配置对GC 工作模式与内存的影响 - YOYOFx

      2017-11-15 10:05

    • ASP.NET Core集成现有系统认证 - 腾飞(Jesse)

      ASP.NET Core集成现有系统认证 - 腾飞(Jesse)

      2017-11-14 12:40

    网友点评
    -