В свободном API вы должны использовать анонимный тип:
modelBuilder.Entity<YourType>()
.HasKey(e => new
{
e.VarChar,
e.Int1,
e.Int2
});
Другой способ - использовать аннотации данных:
public class YourType
{
[Key, Column(Order = 0)]
public string VarChar { get; set; }
[Key, Column(Order = 1)]
public int Int1 { get; set; }
[Key, Column(Order = 2)]
public int Int2 { get; set; }
}
В обоих сценариях важен порядок столбцов. После того, как вы попытаетесь использовать DbSet<YourType>.Find
, вам придется вводить ключи в том же порядке. EF также использует порядок внутри.