Похоже, вы хотите, чтобы сложный тип И хотел, чтобы сложный тип был распознан как ключ, используя соглашение о добавлении идентификатора в конце имени свойства.
EF CF не может сделать это на данный момент.
Вы можете сообщить EF CF о составном ключе через атрибут Key или FluentAPI.
Аннотация данных:
public class Product
{
[Key, Column(Order=0)]
public string ShortDescription {get;set;}
[Key, Column(Order=1)]
public string UserName {get;set;}
}
Fluent API:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Product>()
.HasKey(p=> new{p.ShortDescription, p.UserName});
}
Вы можете создать сложный тип, который вы можете использовать в своем коде, чтобы работать так, как вы хотите, чтобы ваш код работал концептуально.
public class Product
{
public ProductID Key {get;set;}
}
public class ProductID
{
public string ShortDescription {get;set;}
public string UserName {get;set;}
}
Затем отобразить его с помощью Fluent API:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.ComplexType<ProductID>()
.Property(p=>p.ShortDescription)
.HasColumnName("ShortDescription")
.Property(p=>p.UserName)
.HasColumnName("UserName");
}
Или, если вы хотите использовать аннотации данных:
[ComplexType]
public class ProductID
{
[Column("ShortDescription")]
public string ShortDescription {get;set;}
[Column("UserName")]
public string UserName {get;set;}
}
Вы должны указать имена столбцов, или в конфигурации предполагается, что имена столбцов - ProductID_ShortDescription ....
Вот еще немного информации о сложных типах.