entity-framework - EF Core Code First - 聚集索引和标识列
问题描述
我正在使用 EF Core 2.0 创建一个表,其中主键是 aGUID
并且聚集索引是一个自动递增的INT
列。但我收到了这个错误:
无法在表“租户”上创建多个聚集索引。在创建另一个之前删除现有的聚集索引“PK_Tenants”
这是创建实体和 Fluent API 的代码。
租户.cs
public class Tenant : EntityBase
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ClusteredId { get; set; }
public new Guid TenantId { get; set; }
public string TenantCode { get; set; }
}
流利的API
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Tenant>().HasIndex(c => c.TenantId).ForSqlServerIsClustered(false);
builder.Entity<Tenant>().HasIndex(c => c.ClusteredId).HasName("ClusteredId").ForSqlServerIsClustered(true);
base.OnModelCreating(builder);
}
请建议,如何消除此错误并GUID
为自增列创建主键和聚集索引INT
。
谢谢。
解决方案
PK 指数没有明确维护。在 EF Core 中,它可以通过KeyBuilder
fluent API 进行配置(注意HasKey
代替HasIndex
):
builder.Entity<Tenant>().HasKey(c => c.TenantId).ForSqlServerIsClustered(false);
builder.Entity<Tenant>().HasIndex(c => c.ClusteredId).HasName("ClusteredId").ForSqlServerIsClustered(true);
推荐阅读
- jquery - Addclass if length % 3 == 1 or == 2
- r - R shiny-app DT:使用大于应用过滤器
- php - 蛋糕php中未定义的索引X-Api-Key
- osgi - 在新版本的 JBossFuse 中捆绑中突然出现未解决的约束
- api - 我如何自己构建 tensorflow-serving-api?
- assembly - 汇编 att x86-64 使用 C fopen 打开文件
- javascript - 无法对这个特定服务“未定义”目标命名空间进行 SOAP 调用
- java - Android 不知道如何修复这个索引越界异常 FirebaseRecyclerview
- c - 指针算术以 Code139 终止程序(分段错误)
- php - Twilio 异常在 codeigniter 中给出错误