繁体   English   中英

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

[英]How to configure an Identity column using Entity Framework Core?

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

显然,例如,我可以使用 EF6 的 fluent API 来做到这一点。

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

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

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

这里这里

您将为 Identity 配置一个属性,如下所示:

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

您可以为 Sequences 配置一个属性,如下所示:

 ForSqlServer().UseSequence();

由于 aspnet-core 重组,url 已更改,自首次询问以来,方法也已更改。

这里这里

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)

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

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

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

.UseIdentityColumn()

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM