Skip to main content

FDDB055: Conflicting index type

FieldValue
CodeFDDB055
SeverityError

Message​

Index '{0}' has conflicting types: {1} on entity '{2}' vs {3} on entity '{4}'

Description​

When multiple entities define the same DynamoDB index, they must use the same index type (either all GSI or all LSI). An index cannot be both a Global Secondary Index and a Local Secondary Index.

GSIs and LSIs are fundamentally different DynamoDB constructs. A GSI has its own partition key and optional sort key, while an LSI shares the base table's partition key. The same index name cannot be both.

Example​

The following code triggers this diagnostic:

[DynamoDbTable("shared-table", IsDefault = true)]
public partial class Order
{
[PartitionKey]
[DynamoDbAttribute("pk")]
public string Pk { get; set; } = string.Empty;
[SortKey]
[DynamoDbAttribute("sk")]
public string Sk { get; set; } = string.Empty;
[GsiPartitionKey("date-index")]
[DynamoDbAttribute("createdAt")]
public string CreatedAt { get; set; } = string.Empty;
}
[DynamoDbTable("shared-table")]
public partial class Customer
{
[PartitionKey]
[DynamoDbAttribute("pk")]
public string Pk { get; set; } = string.Empty;
[SortKey]
[DynamoDbAttribute("sk")]
public string Sk { get; set; } = string.Empty;
[LsiSortKey("date-index")]
[DynamoDbAttribute("createdAt")]
public string CreatedAt { get; set; } = string.Empty;
}

Fix​

The corrected version:

[DynamoDbTable("shared-table", IsDefault = true)]
public partial class Order
{
[PartitionKey]
[DynamoDbAttribute("pk")]
public string Pk { get; set; } = string.Empty;
[SortKey]
[DynamoDbAttribute("sk")]
public string Sk { get; set; } = string.Empty;
[GsiPartitionKey("date-index")]
[DynamoDbAttribute("createdAt")]
public string CreatedAt { get; set; } = string.Empty;
}
[DynamoDbTable("shared-table")]
public partial class Customer
{
[PartitionKey]
[DynamoDbAttribute("pk")]
public string Pk { get; set; } = string.Empty;
[SortKey]
[DynamoDbAttribute("sk")]
public string Sk { get; set; } = string.Empty;
[GsiPartitionKey("date-index")]
[DynamoDbAttribute("createdAt")]
public string CreatedAt { get; set; } = string.Empty;
}