如何使用 Entity Framework 核心配置标识列?
How to configure an Identity column using Entity Framework Core?
如何在 Entity Framework Core 中创建自动递增标识列?
显然我可以使用流利的 API 来实现,例如 EF6。
由于 EF7 文档非常少,我们所知道的大部分内容都必须从源代码或单元测试中收集。根据EF7源码中的以下两个单元测试...
您可以像这样为身份配置 属性:
b.Property(e => e.Id).ForSqlServer().UseIdentity();
并且您可以像这样为序列配置 属性:
ForSqlServer().UseSequence();
由于 aspnet-core 重组,urls 发生了变化,自从第一次提出这个问题以来,方法也发生了变化。
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()
如何在 Entity Framework Core 中创建自动递增标识列?
显然我可以使用流利的 API 来实现,例如 EF6。
由于 EF7 文档非常少,我们所知道的大部分内容都必须从源代码或单元测试中收集。根据EF7源码中的以下两个单元测试...
您可以像这样为身份配置 属性:
b.Property(e => e.Id).ForSqlServer().UseIdentity();
并且您可以像这样为序列配置 属性:
ForSqlServer().UseSequence();
由于 aspnet-core 重组,urls 发生了变化,自从第一次提出这个问题以来,方法也发生了变化。
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()