dotnet / dotnet/efcore

Clustered index not created for alternate key when property is named "Id"

Open
#30,133 2 comments 0 reactions 1 assignee Claimed by @AndriySvyryd View on GitHub
area-model-building customer-reported
Dominant language
C#
Stars
14.8k
Forks
3.4k
PR merge metrics
PR metrics pending

Description

## Issue
When specifying a clustered index for an alternate key and the property is named "Id", the clustered index is not added to the model or subsequent migrations. I attached a full repro project, but here are some relevant snippets:

```csharp
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity(builder =>
{
builder.Property(e => e.Id)
.HasValueGenerator()
.ValueGeneratedOnAdd();
builder.HasAlternateKey(e => e.Id)
.IsClustered();
builder.HasKey(e => e.PrimaryKey)
.IsClustered(false);
});
}
```

```csharp
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "MyEntity",
columns: table => new
{
PrimaryKey = table.Column(type: "uniqueidentifier", nullable: false),
Id = table.Column(type: "uniqueidentifier", nullable: false),
Data = table.Column(type: "nvarchar(max)", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_MyEntity", x => x.PrimaryKey)
.Annotation("SqlServer:Clustered", false);
});
}
```

```csharp
modelBuilder.Entity("ClusteredAlternateKeyRepro.MyEntity", b =>
{
b.Property("PrimaryKey")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");

b.Property("Data")
.IsRequired()
.HasColumnType("nvarchar(max)");

b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");

b.HasKey("PrimaryKey");

SqlServerKeyBuilderExtensions.IsClustered(b.HasKey("PrimaryKey"), false);

b.ToTable("MyEntity");
});
```

## Workaround
To work around this, I renamed the property in code and mapped to the "Id" column to avoid renaming the existing column.

EF Core version:
Database provider: Microsoft.EntityFrameworkCore.SqlServer
Target framework: .NET 6, 7
Operating system: Windows
IDE: Rider
[ClusteredAlternateKeyRepro.zip](https://github.com/dotnet/efcore/files/10493330/ClusteredAlternateKeyRepro.zip)

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.