Sembra che il modo corretto e persistente per mantenere un dizionario in un database sia il modo in cui è enumerato, poiché le tabelle sono essenzialmente insiemi con un concetto di ordine allentato, proprio come IEnumerable. Cioè, un dizionario viene enumerato come IEnumerator < KeyValuePair < TKey, TValue>>, e così il tavolo dovrebbe avere 2 colonne:
Key
Value
Da lì si hanno le convenzioni EF esistenti di tipi complessi, dove la chiave potrebbe effettivamente essere un oggetto con molte proprietà e valore pure. Ad esempio, un dizionario di oggetti utente potrebbe essere simile:
Username (TKey)
Address1 (TValue)
Address2 (TValue)
E 'un peccato questo schema generalizzato non è built-in per EF; dovrebbe essere proposto.
Invece di sviluppare un tipo specifico per la soluzione, è possibile utilizzare una classe generalizzata che produce una versione annotata dei dati di KeyValuePair <>.
public class EFKeyValuePair<TKey, TValue>
{
[Key]
public TKey Key { get; set; }
public TValue Value { get; set; }
}
Io non sono certo come ci si assicura i nomi delle tabelle sarebbero scritti in maniera logica e verificabile tuttavia senza ereditare questa classe e l'aggiunta di un attributo per ogni sottoclasse. Forse l'API Fluent potrebbe farti fare questo passo finale (che non mi è molto familiare).
fonte
2011-10-17 20:36:00