我该如何在Entity Framework Core中创建自增标识列?
很明显,我可以使用EF6的流畅API来完成。
我该如何在Entity Framework Core中创建自增标识列?
很明显,我可以使用EF6的流畅API来完成。
在EF7的最新版本中,有一个新的扩展方法可以设置标识列。
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<MyEntity>(b =>
{
b.HasKey(e => e.Identifier);
b.Property(e => e.Identifier).ValueGeneratedOnAdd();
});
}
ValueGeneratedOnAdd
方法相当于带有Identity的DatabaseGenerated
属性! - S.SerpooshanDateTime
,我们需要为它们设置一个“默认值”,以便程序知道如何为它们生成新数据。 - S.Serpooshan由于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();
}
这些网址可能会再次更改(这就是为什么我包括相关代码的原因),但只需查看网址并转到网站即可轻松找出新网址。
实际上,我的回答的整个重点是,你可以通过查看GitHub上源代码中的单元测试来自己弄清楚这些东西。你不需要别人来指导你。
编辑:将链接更新为版本2.1(仍然适用于1.1和2.0)
看起来他们再次更改了方法,新的方法是:
.UseIdentityColumn()
在使用 EF Core 1.0 及更高版本的最新版本时,您应该使用
builder.Entity<ApplicationUser>().Property<int>(nameof(ApplicationUser.AccountNo))
.UseSqlServerIdentityColumn()
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<MyEntity>(b =>
{
b.Key(e => e.Identifier);
b.Property(e => e.Identifier).ForSqlServer().UseIdentity();
}
}
在你的模型中使用[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
属性。
例如:
public class Blog
{
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public int BlogId { get; set; }
public string Url { get; set; }
public DateTime LastUpdated { get; set; }
}
int Id
字段作为主键。 - Jeroen Vannevel