Architettura del progetto per applicazione con database dinamico

0

Abbiamo un progetto in cui alcune tabelle sono definite e alcune verranno generate in runtime, ovvero dinamiche e senza strutture predefinite.

Generalmente usiamo Entity Framework per comunicare con il database (nel nostro caso MS SQL).

Ma per questo tipo di requisito, cosa dovremmo fare per la comunicazione del database, dato che il database sarà dinamico e anche i nomi delle colonne sono dinamici.

Le tabelle e le colonne del database sono generate dinamicamente quindi, nel caso di Entity Framework, non sono sicuro che funzioni o meno?

Se stiamo scegliendo Entity Framework con Code First, in quel caso dobbiamo creare anche runtime delle classi e aggiornare il database, il che non credo sia possibile.

Se stiamo scegliendo Entity Framework con Model First, in tale scenario dobbiamo anche aggiornare il file di modello (.edmx) runtime, che non credo sia possibile.

Quindi l'ultima opzione è usare ADO.Net da cui possiamo interrogare dinamicamente il database e ottenere risultati senza definire il modello.

Quindi ho bisogno di aiuto qui per progettare l'architettura e un buon modo per archiviarlo. Siamo pronti per andare con NoSql ma la cosa "database dinamico".

Esiste un modo per utilizzare Entity Framework?

    
posta Ruchir Shah 13.04.2015 - 11:33
fonte

1 risposta

2

Ho visto cambiare dinamicamente i sistemi DB, guidati dalla configurazione in cui il cliente aggiunge le colonne "al volo" per i metadati che desiderano archiviati in aggiunta a poche colonne fisse.

In tutti i casi, ora stai guidando la tua applicazione usando la configurazione, e questo significa che le tue query devono essere calcolate in fase di esecuzione - questo esclude tutti i sistemi che determinano la struttura del DB in fase di compilazione, come praticamente ogni ORM lì è. Quindi utilizzerai query SQL integrate nel codice, che dovrai generare da solo. Quindi utilizzare i normali comandi del client SQL per chiamare DB-SQLClient o ODBC.

È possibile ridisegnare un sistema di questo tipo per posizionare i dati dinamici in una singola colonna come un blob di XML, ma poi si perde la capacità di cercare o eseguire query su tali dati: i DB NoSQL risolvono questo problema, ma se è necessario utilizzare una combinazione Postgresql di Postgresql consente di inserire dati dinamici "nosql" in una colonna che può essere indicizzata dal motore DB, offrendo il meglio di entrambi i mondi.

    
risposta data 13.04.2015 - 12:23
fonte