I need a composite unique constraint for my entity's Name
property, which is unique per Category
(for which it has an FK).
So something like this:
entityTypeBuilder
.HasIndex(i => new { i.Name, i.Category.Id })
.IsUnique();
But this fails when I generate a migration, because of the Category.Id
navigation property.
I know I can hardcode the values as strings, but I don't want to lose the static typing.
What options do I have?
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");