如何在Entity Framework Core中创建自动增量标识列?
显然,我可以使用适用于EF6的流畅API来实现。
答案 0 :(得分:27)
在最新版本的EF7中,有一种新的扩展方法来设置标识列
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<MyEntity>(b =>
{
b.HasKey(e => e.Identifier);
b.Property(e => e.Identifier).ValueGeneratedOnAdd();
});
}
答案 1 :(得分:18)
由于EF7文档很少,我们知道的大部分内容都要从源代码或单元测试中收集。根据EF7源中的以下两个单元测试...
您可以为Identity配置属性,如下所示:
b.Property(e => e.Id).ForSqlServer().UseIdentity();
你可以为这样的序列配置一个属性:
ForSqlServer().UseSequence();
由于aspnet-core reorg,网址发生了变化,自首次询问以来,这些方法也发生了变化。
if (_useSequence)
{
b.Property(e => e.Identifier).ForSqlServerUseSequenceHiLo();
}
else
{
b.Property(e => e.Identifier).UseSqlServerIdentityColumn();
}
这些网址可能会再次更改(这就是为什么我会包含相关代码),但只是看看网址并访问网站并找出新网址是多么容易。
真的,我的答案的全部意义在于你可以通过在GitHub上查看源代码中的单元测试来自己解决这些问题。你不应该让别人把它喂给你。
编辑:更新了2.1版的链接(仍适用于1.1和2.0)
答案 2 :(得分:8)
使用最新的EF(测试版7,可能更早,最高可达RC1),您应该使用
builder.Entity<ApplicationUser>().Property<int>(nameof(ApplicationUser.AccountNo))
.UseSqlServerIdentityColumn()
答案 3 :(得分:7)
好像他们再次更改了它,现在的新方法是:
.UseIdentityColumn()
答案 4 :(得分:3)
以下是在您想要OR的情况下明确地执行此操作,它不是默认行为。
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<MyEntity>(b =>
{
b.Key(e => e.Identifier);
b.Property(e => e.Identifier).ForSqlServer().UseIdentity();
}
}