Похоже, обобщенный, правильный способ сохранения словаря в базе данных будет таким же, каким он перечисляется, поскольку таблицы по сути являются множествами со свободным понятием порядка - как IEnumerable То есть словарь перечисляется как IEnumerator >, и поэтому таблица должна иметь 2 столбца:
Key
Value
Оттуда у вас есть существующие соглашения EF о сложных типах, где Key может фактически быть объектом со многими свойствами, а также со значением. Например, словарь пользовательских объектов может выглядеть так:
Username (TKey)
Address1 (TValue)
Address2 (TValue)
К сожалению, этот обобщенный шаблон не встроен в EF; это должно быть предложено.
Вместо разработки конкретного типа для вашего решения, вы можете использовать обобщенный класс, который создает аннотированную версию KeyValuePair <>.
public class EFKeyValuePair<TKey, TValue>
{
[Key]
public TKey Key { get; set; }
public TValue Value { get; set; }
}
Я не уверен, как бы вы обеспечили, чтобы имена таблиц были записаны логичным и проверяемым способом, однако без наследования этого класса и добавления атрибута к каждому подклассу. Возможно, Fluent API поможет вам сделать этот последний шаг (с которым я не очень хорошо знаком).