如何使用Entity Framework Core配置Identity列?

And*_*ffy 23 c# entity-framework-core

如何在Entity Framework Core中创建自动增量标识列?

显然,我可以使用流畅的API for EF6来做到这一点.

小智 36

在最新版本的EF7中,有一种新的扩展方法来设置标识列

protected override void OnModelCreating(ModelBuilder modelBuilder)
{    
  modelBuilder.Entity<MyEntity>(b =>
  {
    b.HasKey(e => e.Identifier);
    b.Property(e => e.Identifier).ValueGeneratedOnAdd();
  });
}
Run Code Online (Sandbox Code Playgroud)

  • 注意:ValueGeneratedOnAdd 实际上并未将该列设置为 Identity 列,否则将失败。 (2认同)
  • 我刚刚检查了生成的数据库,SQL Server 中的列定义是“Is Identity”= Yes (2认同)

Eri*_*sch 20

由于EF7文档很少,我们知道的大部分内容都要从源代码或单元测试中收集.根据EF7源中的以下两个单元测试......

这里这里

您可以为Identity配置属性,如下所示:

b.Property(e => e.Id).ForSqlServer().UseIdentity();
Run Code Online (Sandbox Code Playgroud)

你会为Sequences配置一个属性,如下所示:

ForSqlServer().UseSequence();
Run Code Online (Sandbox Code Playgroud)

由于aspnet-core reorg,网址发生了变化,自首次提出此问题以来,这些方法也发生了变化.

这里这里

if (_useSequence) 
{
    b.Property(e => e.Identifier).ForSqlServerUseSequenceHiLo();
} 
else 
{
    b.Property(e => e.Identifier).UseSqlServerIdentityColumn();
}
Run Code Online (Sandbox Code Playgroud)

这些网址可能会再次发生变化(这就是为什么我会包含相关代码),但只是查看网址并访问网站并找出新网址是多么容易.

真的,我的答案的全部意义在于你可以通过在GitHub上查看源代码中的单元测试来自己解决这些问题.你不应该需要有人把勺子喂给你.

编辑:更新了2.1版的链接(仍适用于1.1和2.0)


cod*_*ion 9

使用最新位EF(测试版7,可能更早,最高可达RC1)

builder.Entity<ApplicationUser>().Property<int>(nameof(ApplicationUser.AccountNo))
            .UseSqlServerIdentityColumn()
Run Code Online (Sandbox Code Playgroud)


Gre*_* Z. 9

看起来他们再次改变了它,现在的新方法是:

.UseIdentityColumn()
Run Code Online (Sandbox Code Playgroud)


And*_*ffy 5

这是在您想要或它不是默认行为的情况下明确执行的方法。

protected override void OnModelCreating(ModelBuilder modelBuilder)
{    
  modelBuilder.Entity<MyEntity>(b =>
  {
    b.Key(e => e.Identifier);
    b.Property(e => e.Identifier).ForSqlServer().UseIdentity();
  }
}
Run Code Online (Sandbox Code Playgroud)