Il nostro cliente pubblicizza prodotti ma gli attributi del prodotto sono molto diversi tra loro. Ci sono quasi tante "classi" di prodotti quanti sono i prodotti.Esempi per Entity Framework 4: mappatura dei POCO nel database EAV?
Inizialmente, abbiamo creato un database EAV in cui abbiamo aggiunto e rimosso gli attributi per ogni "classe" di prodotto. Il tutto funziona molto bene, ma la complessità è anestetizzante. Questo è il Database # 1.
Alla fine abbiamo creato un insieme di campi comuni per rappresentare tutti i prodotti (POCO), spostando i campi "extra" in un campo XML "catch all". Questo è il database n. 2.
Ora abbiamo alcuni clienti che utilizzano il vecchio e alcuni clienti che utilizzeranno il nuovo. Non volevamo aggiornare il vecchio fino a quando non avremmo dovuto farlo, ma di tanto in tanto abbiamo delle modifiche che richiedono più tempo del necessario a causa della struttura EAV.
Domande:
- Eventuali esempi là fuori su come codificare EF a persistere pocos a un database EAV (in cui si dispone di una tabella di nomi di campo e una tabella di dati)?
- Dovremmo semplicemente cancellare il database e scrivere tabelle "normali" per tutti quei vecchi clienti, dato che abbiamo delle modifiche di volta in volta?
Normalmente si riferisce al modulo normale Boyce Codd.
Abbiamo gestito il vecchio database estraendo la sua struttura nel software, quindi eseguendo il mapping su POCO nel repository.
Questo è un buon suggerimento. Spero di non sanguinare la struttura EAV nei nostri repository, ma di avere EF più forse alcune funzioni all'interno di EF trasformare i dati ambientali in POCO puliti e fortemente tipizzati. I nostri POCO hanno i campi comuni e catturano tutto il campo per il resto. Ho solo bisogno di un collegamento tra EF e questi metodi di estrazione (senza utilizzare le stored procedure SQL). –
Prenderò il tuo altro suggerimento come risposta, che è evitare la struttura EAV e ricreare il database. –