如何使用 Entity Framework 核心配置标识列?

How to configure an Identity column using Entity Framework Core?

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

显然我可以使用流利的 API 来实现,例如 EF6。

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

Here and Here

您可以像这样为身份配置 属性:

b.Property(e => e.Id).ForSqlServer().UseIdentity();

并且您可以像这样为序列配置 属性:

ForSqlServer().UseSequence();

由于 aspnet-core 重组,urls 发生了变化,自从第一次提出这个问题以来,方法也发生了变化。

Here and Here

if (_useSequence) 
{
    b.Property(e => e.Identifier).ForSqlServerUseSequenceHiLo();
} 
else 
{
    b.Property(e => e.Identifier).UseSqlServerIdentityColumn();
}

这些 url 可能会再次发生变化(这就是我包含相关代码的原因),但是只需查看 url 并转到站点并弄清楚就非常容易了新的 url 是什么。

真的,我的回答的重点是你可以通过查看 GitHub 上源代码中的单元测试来自己解决这些问题。你不应该需要有人用勺子喂它。

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

以下是在您想要或不是默认行为的情况下如何明确执行此操作。

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

对于最新的 EF Core 1.0 及更高版本,您应该使用

builder.Entity<ApplicationUser>().Property<int>(nameof(ApplicationUser.AccountNo))
            .UseSqlServerIdentityColumn()

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

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

看起来他们又改了一次,现在的新方法是:

.UseIdentityColumn()