Generate a composite unique constraint/index, in EF Core
As an extension to Ivan's excellent response:
If you define the foreign key upfront, you can at least control the name association
const string auditForeignKey = "AuditId";
builder.HasOne(e => e.Audit)
.WithMany(e => e.AuditLocations)
.HasForeignKey(auditForeignKey);
builder.HasIndex(auditForeignKey, nameof(AuditLocation.LocationId)).IsUnique();
Add a foreign key for Category of CategoryId
on the entity in question and use that in the index builder instead of the navigation property.
As soon as you know the shadow property name, you can use (at least in EF Core 1.1.0) the string based HasIndex
method overload
public virtual IndexBuilder HasIndex(params string[] propertyNames)
e.g.
entityTypeBuilder
.HasIndex("Name", "CategoryId")
.IsUnique();
Same for HasAlternateKey
:
entityTypeBuilder
.HasAlternateKey("Name", "CategoryId");