Что-то вроде этого должно дать вам отношение 1-ко-многим, хотя вам нужно дать типу Value, например, строку, чтобы сохранить его в базе данных, часто для таких динамических c решений, как вы, возможно, затем добавите type, чтобы указать тип для десериализации, но так как вы затем десериализовываете в любом случае, вы также можете просто добавить вещи как json или что-то еще в БД.
public class Product
{
public int Id {get; set;}
public string Name{get; set;}
public ICollection<Property> Properties{get; set;}
}
public class Property
{
public int Id {get; set;}
public string Name {get; set;}
public string Value {get; set;}
public int ProductId {get; set;}
}
Если вы не делаете очень динамически c система, кажется, неправильно иметь свойства в виде таблицы, во многом зависит от того, что вы делаете, и, возможно, ключ-значение db может быть лучшим инструментом для работы, если это ваша основная проблема, как в это зависит от самых сложных вещей.
Этот пример основывается на соглашении, поэтому свойства, подобные ProductId, должны называться именно так. Вы можете посмотреть EntityTypeConfigurations, если хотите получить больший контроль над именами и связями и тому подобным, или использовать аннотации данных для выполнения той же работы.