如何在Entity Framework 7中配置密钥标识列?

entity-framework-core

我在Entity Framework 7 RC1中有以下Mapper:

  b.ToTable("Categories");
  b.HasKey(x => x.Id);
  b.Property(x => x.Id) ... ??

如何在EF 7 RC1中创建Id和identity列?

SQL等价物是:

Id int identity not null

我读过会是这样的:

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

但在EF7 RC1中我找不到ForSqlServer()。我发现:

.ForSqlServerHasComputedSql()
.ForSqlServerHasColumnName()
.ForSqlServerHasColumnNameType()
.ForSqlServerHasDefaultValue()
.ForSqlServerHasDefaultValueSql()
.ForSqlServerUseSequenceHiLo()
...

一般承认的答案

您可以通过调用显式配置标识列。

b.Property(x => x.Id).UseSqlServerIdentityColumn();

另外值得注意的是:identity是与主键一起使用的默认值生成模式。使用序列是选择加入。


热门答案

natemcmaster提供的答案是正确的。您可以使用fluentAPI进行定义,也可以使用Data Annotation [Key]来定义主键。

但是,有几种方法可以在EF Core中定义标识值。您可以使用标识(默认),序列和HiLo模式与序列。身份是默认的。实际上,如果您的属性名称以Id或<typeName> Id结尾,则不必将其定义为标识列。按惯例,EF Core将名为Id或<typeName> Id的属性配置为实体的键。

ForSqlServer开始具有扩展方法名称的原因是,EF Core支持许多数据库提供程序。这些提供程序的功能略有不同,因此您可以根据所使用的提供程序为同一属性指定不同的行为。

请阅读这些文章,了解更多关于使用带有EF核心的Sequcence和带有EF核心的 HiLo的更多信息。



Related

许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因