È possibile modificare i mapping e le proprietà delle relazioni del modello in Entity Framework CodeFirst in fase di runtime?

1

Ecco la situazione. Ho un'applicazione aziendale che utilizza EF CodeFirst per mappare i POCO a un database esistente. Questo ha funzionato bene finora. In realtà direi che sta funzionando molto bene.

È stata introdotta una situazione (fuori dalle mie mani) che comporta l'aggiunta di nuove tabelle al database e / o nuove colonne alle tabelle quando un cliente ha acquistato un componente aggiuntivo.

Non ci sono chiari confini del dominio. Quindi, mi trovo in una posizione difficile perché ho bisogno di supportare un'entità a livello di prodotto di base, ma poi ho bisogno di supportare la stessa entità (l'enfasi su questa entità viene considerata la stessa) con poche nuove colonne. Inoltre, l'entità può avere nuove relazioni con nuove tabelle.

Sembra che sia possibile aggiungere entità a uno schema (vedi link per un approccio generale) ma non affronta proprietà e relazioni. È possibile o addirittura fattibile modificare lo schema ei modelli di DbContext in fase di runtime?

L'applicazione utilizza ASP.NET MVC WebAPI con un pattern di repository. Quindi, come ultima risorsa, sto considerando la possibilità di interrompere l'uso di EF e sostituirlo con ADO.NET, ma (ovviamente) sarà un processo molto laborioso e impegnativo nel tempo.

Grazie per l'aiuto.

    
posta quakkels 24.09.2013 - 23:23
fonte

1 risposta

1

Mi sembra che cambiare le cose in fase di esecuzione ti porterà in molti mondi nidificati di ferite.

La domanda che vorrei porre è se questo è il modo migliore per implementare questi componenti aggiuntivi. Posso vedere due alternative utili:

  • Se i componenti aggiuntivi sono standard, puoi utilizzare Per gerarchia per rappresentare le diverse versioni della tabella. Nell'archivio dati avresti una singola tabella più grande con tutte le colonne, ma a seconda dei requisiti dell'utente potresti scegliere diverse entità che includono o escludono i dati aggiuntivi.
  • Se i componenti aggiuntivi non sono standard, avrai bisogno di un codice sottostante diverso a prescindere. In questo caso, diversi clienti richiederanno integrazioni diverse e si potrebbe utilizzare un contenitore di Iniezione di dipendenza per consentire all'utente di passare da un'opzione all'altra per una determinata distribuzione.
risposta data 25.09.2013 - 14:43
fonte

Leggi altre domande sui tag