2011-09-23 10 views
5

Stiamo usando mongodb con C#. Stiamo cercando di capire come mantenere coerente la nostra collezione. Al momento, se uno sviluppatore apporta modifiche alla struttura della classe (aggiungi un campo o cambia il tipo di dati o modifica la proprietà all'interno di una classe nidificata), lui/lei deve modificare manualmente la raccolta mongo.Gestione delle modifiche nella struttura della classe per essere coerenti con la raccolta mongodb

È un problema perché il nostro progetto è in crescita e gli sviluppatori che lavorano al progetto continuano ad aumentare. Stavo chiedendo se qualcuno ha già trovato un modo per gestire questo problema.

  • Research
    1. Ho trovato un similar question. tuttavia, non è riuscito a trovare la soluzione.
    2. Trovato un modo per trovare tutte le proprietà Finding the properties; tuttavia, datatype e documenti nidificati diventano un problema.
+0

Non sono sicuro di aver capito: i documenti in una raccolta di mongo possono essere diversi, quindi non c'è nulla che ti impedisca di inserire nuovi documenti nella raccolta esistente, anche se i nuovi documenti sono basati su istanze di classi aggiornate. O è il problema che si desidera correggere i documenti esistenti nel db? Un'altra cosa: il problema riguarda la macchina di sviluppo o il sistema di produzione? –

+3

@ChristianHorsdal: hai ragione. non c'è nulla che ci impedisca di inserire nuovi documenti, tuttavia, quando recuperiamo i documenti, il serializzatore genererà un'eccezione. è disponibile una soluzione alternativa, se si specifica di ignorare elementi aggiuntivi o raccogliere elementi aggiuntivi in ​​un altro documento BSON. Questo può essere fatto nel serializzatore BSON. Ma stavamo cercando una sorta di script pre-build che avvisasse lo sviluppatore di apportare le modifiche – Paul

risposta

1

Se si desidera migrare gradualmente come record sono accessibili è necessario seguire alcune semplici regole:

1) Se si aggiunge un campo che era meglio essere annullabile o di avere un valore predefinito specificato .

2) Non rinominare mai i campi, non modificare mai i tipi di campo
- Aggiungere sempre nuovi campi, aggiungere codice di migrazione, rimuovere i vecchi campi solo quando tutti i documenti sono stati migrati.

per la prototipazione con MongoDB e C# ho costruire un dynamic wrapper ... che consente di specificare gli oggetti utilizzando solo interfacce (senza classi necessarie), e consente di aggiungere dinamicamente nuove interfacce a un oggetto esistente. Non è pronto per l'uso di produzione, ma per la prototipazione consente un notevole risparmio e semplifica la migrazione.

+0

Grazie a questa risposta ho scoperto BsonDefaultValueAttribute che è essenziale per la raccomandazione di cui sopra! – kingdango

Problemi correlati