Parece que la forma generalizada y correcta de conservar un diccionario en una base de datos sería la forma en que está enumerado, ya que las tablas son esencialmente conjuntos con un concepto de orden libre, como IEnumerable. Es decir, un diccionario se enumera como IEnumerator < KeyValuePair < TKey, TValue>>, por lo que la mesa debe tener 2 columnas:
Key
Value
Desde allí se puede tener las convenciones EF existentes de tipos complejos, en los que la clave puede realmente ser un objeto con muchas propiedades y valor también. Por ejemplo, un diccionario de objetos de usuario podría ser:
Username (TKey)
Address1 (TValue)
Address2 (TValue)
Es desafortunado este patrón generalizado no está integrado en EF; debería ser propuesto.
En lugar de desarrollar un tipo específico para su solución, puede usar una clase generalizada que produzca una versión anotada de datos de KeyValuePair <>.
public class EFKeyValuePair<TKey, TValue>
{
[Key]
public TKey Key { get; set; }
public TValue Value { get; set; }
}
No estoy seguro de cómo le gustaría asegurarse de los nombres de las tablas serían escritos a cabo de una manera lógica y verificable sin embargo sin heredar esta clase y la adición de un atributo a cada subclase. Tal vez la API Fluent podría darte este último paso (con el que no estoy muy familiarizado).