Domanda

Sto scrivendo un semplice sistema di gestione dei documenti per il mio lavoro. Sono solo un hobbyista ma sto programmando da un po 'di tempo. Il mio problema è questo Quando elimino numerosi documenti tramite la mia app, devo rimuovere i relativi record del database. Qual è il modo migliore per farlo senza finire con file senza record di database o record che puntano a file che non esistono, se viene generata un'eccezione?

È stato utile?

Soluzione

Archivia i file nel database. Quindi puoi avere l'integrità referenziale senza aggiungere complessità (MSMQ ecc.) Alla tua applicazione. Sì, questo aumenterà la dimensione del tuo db. Ma i file sono già sul tuo server, quindi sono gli stessi bit in un posto diverso.

Altri suggerimenti

Questo è un tipo di "transazione distribuita" sistema. Probabilmente vuoi scrivere una routine di consolidamento ed eseguirla di tanto in tanto, avrai delle incongruenze ad un certo punto.

Hai detto " tramite la mia app " ;. Questo significa che possono rimuovere i file solo attraverso l'interfaccia dell'applicazione? In tal caso, avvolgere la cancellazione in una transazione personalizzata sia per rimuovere il file sia per rimuovere il record db. Se una parte fallisce, tira indietro l'altra.

Se si desidera consentire loro di rimuovere i file dalla directory dei file e quindi rimuovere automaticamente i record db, è possibile fare molte cose, tra cui pulizie periodiche e / o un servizio Windows di controllo della directory dei file che monitora l'attività in una directory e quindi avvia le pulizie.

Grazie per le tue risposte. Stavo già pensando di seguire il percorso BLOB ma non ero sicuro che il mio capo l'avrebbe fatto. Gli piace una buona struttura di directory, sai? Per quanto riguarda le transazioni distribuite, non ne sapevo nulla ma sembrano il modo più professionale di affrontarlo. Ma sono un hobbista e tutto sembra troppo coinvolto, quindi vincerò il mio capo sul fronte BLOB. Saluti.

È necessario utilizzare una transazione distribuita che includerà il database e la coda di messaggistica MS (MSMQ). Verifica che il tuo database possa essere registrato in una transazione distribuita con il Distributed Transaction Coordinator (DTC) di Microsoft.

Programmare tutte le operazioni sui file con MSMQ.

Questo link potrebbe aiutarti

Ho funzionalità simili in alcune delle mie app.

Quello che faccio è cancellare prima il file attraverso l'ap, quindi eliminare il record del database che ha un link / puntatore al file. Quando gli utenti richiedono un documento (il che significa che il collegamento al file esiste ancora nel database), l'app verifica prima il file e, se per qualche motivo non è presente come previsto, pulisce il record del database a quel punto e notifica all'utente l'errore "quotazione" con grazia.

" orfano " i documenti non accadono comunque molto, ma l'utilizzo di questo metodo garantisce che il database venga costantemente pulito come parte normale dell'esecuzione dell'app.

Esistono molti altri modi per gestirlo, ma questo funziona per me.

Elimina prima i record del database e controlla occasionalmente il repository. Con l'audit del repository intendo cercare file che non hanno un record di database. Se elimini prima il record DB, il codice non cercherà documenti che non sono effettivamente presenti.

Quanti documenti e che tipo di documenti hai intenzione di archiviare?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top