private void creaFotografiaMancante(FileInfo fiFotoMancante, int numFotogramma) { bool success = false; // using( TransactionScope transaction = new TransactionScope() ) { try { Fotografia foto = new Fotografia(); foto.id = Guid.NewGuid(); foto.dataOraAcquisizione = fiFotoMancante.CreationTime; foto.giornata = Convert.ToDateTime(PathUtil.giornoFromPath(fiFotoMancante.FullName)); string idFotografo = PathUtil.fotografoIDFromPath(fiFotoMancante.FullName); foto.fotografo = UnitOfWorkScope.currentDbContext.Fotografi.SingleOrDefault(f => f.id == idFotografo); foto.numero = numFotogramma; // il nome del file, lo memorizzo solamente relativo // scarto la parte iniziale di tutto il path togliendo il nome della cartella di base delle foto. // Questo perché le stesse foto le devono vedere altri computer della rete che // vedono il percorso condiviso in maniera differente. foto.nomeFile = PathUtil.nomeRelativoFoto(fiFotoMancante); // caricaMetadatiImmagine( foto ); UnitOfWorkScope.currentDbContext.Fotografie.Add(foto); int test = UnitOfWorkScope.currentDbContext.SaveChanges(); // Mark the transaction as complete. success = true; // transaction.Complete(); contaFotoAggiunte++; _giornale.Debug("Inserita nuova foto: " + foto.ToString() + "test=" + test); } catch (Exception ee) { _giornale.Error("Non riesco ad inserire una foto. Nel db non c'è ma nel filesystem si: " + fiFotoMancante, ee); } // } _giornale.Debug("success = " + success); }
/** * dato il nome del file della immagine, creo l'oggetto Fotografia e lo aggiungo al suo contenitore * (in pratica faccio una insert nel database). */ private Fotografia aggiungiFoto(FileInfo fileInfo, int numFotogramma, DateTime tempoScarico) { _giornale.Debug("Sto per aggiungere la foto " + fileInfo + " al database"); // Ad ogni foto persisto. // Se per esempio ho 500 foto da salvare, non posso permettermi che se una salta, perdo anche le altre 499 ! Fotografia foto = null; LumenEntities objContext = UnitOfWorkScope.currentDbContext; foto = new Fotografia(); foto.id = Guid.NewGuid(); foto.dataOraAcquisizione = tempoScarico; foto.fotografo = _fotografo; foto.evento = _evento; foto.didascalia = _paramScarica.flashCardConfig.didascalia; foto.numero = numFotogramma; foto.faseDelGiorno = (short?)_paramScarica.faseDelGiorno; foto.giornata = LumenApplication.Instance.stato.giornataLavorativa; // il nome del file, lo memorizzo solamente relativo // scarto la parte iniziale di tutto il path togliendo il nome della cartella di base delle foto. // Questo perché le stesse foto le devono vedere altri computer della rete che // vedono il percorso condiviso in maniera differente. foto.nomeFile = PathUtil.nomeRelativoFoto(fileInfo); caricaMetadatiImmagine(fileInfo.FullName, foto); if (foto.dataOraScatto == null || foto.dataOraScatto == DateTime.MinValue) { foto.dataOraScatto = fileInfo.CreationTime; } objContext.Fotografie.Add(foto); objContext.SaveChanges(); _giornale.Debug("Inserita nuova foto: " + foto.ToString() + " ora sono " + contaAggiunteDb); return(foto); }
public bool modificaMetadatiFotografie(IEnumerable <Fotografia> fotografie, MetadatiFoto metadati) { bool esito = false; try { // riattacco l'entità che non si sa mai if (metadati.evento != null) { try { Evento e = metadati.evento; OrmUtil.forseAttacca <Evento>(ref e); } catch (Exception ee) { _giornale.Debug("Potenziale errore", ee); } } foreach (Fotografia f in fotografie) { Fotografia fotografia = f; try { OrmUtil.forseAttacca(ref fotografia); } catch (Exception ee) { _giornale.Debug("Potenziale errore", ee); fotografia = UnitOfWorkScope.currentDbContext.Fotografie.Single(f2 => f2.id == f.id); } #if DEBUG String didascaliaNew = null; if (metadati.usoDidascalia) { if (!String.IsNullOrWhiteSpace(metadati.didascalia)) { didascaliaNew = metadati.didascalia.TrimEnd().ToUpper(); } } string strDidascaliaOld = fotografia.didascalia; string strFaseDelGiornoOld = fotografia.faseDelGiorno == null ? "empty" : FaseDelGiornoUtil.valoreToString(fotografia.faseDelGiorno); string strEventoOld = fotografia.evento == null ? "empty" : fotografia.evento.descrizione; string strFaseDelGiornoNew = metadati.faseDelGiorno == null ? "empty" : metadati.faseDelGiorno.ToString(); string strEventoNew = metadati.evento == null ? "empty" : metadati.evento.descrizione; String msg = String.Format("Modificati metadati: {0} da: dida:{1} faseGG:{2} evento:{3} in dida:{4} faseGG:{5} evento:{6}", fotografia.ToString(), strDidascaliaOld, strFaseDelGiornoOld, strEventoOld, didascaliaNew, strFaseDelGiornoNew, strEventoNew ); #endif modificaMetadatiFotografie(fotografia, metadati); #if DEBUG _giornale.Debug(msg); #endif } UnitOfWorkScope.currentDbContext.SaveChanges(); _giornale.Debug("Modifica metadati salvataggio eseguito. Ora committo la transazione"); _giornale.Info("Commit metadati andato a buon fine"); esito = true; } catch (Exception eee) { _giornale.Error("Modifica metadati", eee); esito = false; _giornale.Error("Impossibile modificare metadati", eee); } return(esito); }
/** * dato il nome del file della immagine, creo l'oggetto Fotografia e lo aggiungo al suo contenitore * (in pratica faccio una insert nel database). */ private Fotografia aggiungiFotoDB(Fotografia foto, string nomeFileClone) { // Ad ogni foto persisto. // Se per esempio ho 500 foto da salvare, non posso permettermi che se una salta, perdo anche le altre 499 ! Fotografia fotoClone = null; LumenEntities objContext = UnitOfWorkScope.currentDbContext; try { fotoClone = new Fotografia(); fotoClone.id = Guid.NewGuid(); fotoClone.dataOraAcquisizione = foto.dataOraAcquisizione; Fotografo f = foto.fotografo; OrmUtil.forseAttacca <Fotografo>(ref f); fotoClone.fotografo = f; if (foto.evento != null) { Evento e = foto.evento; OrmUtil.forseAttacca <Evento>(ref e); fotoClone.evento = e; } fotoClone.didascalia = foto.didascalia; fotoClone.numero = foto.numero; fotoClone.correzioniXml = foto.correzioniXml; if (foto.imgOrig != null) { fotoClone.imgOrig = (IImmagine)foto.imgOrig.Clone(); } if (foto.imgProvino != null) { fotoClone.imgProvino = (IImmagine)foto.imgProvino.Clone(); } if (foto.imgRisultante != null) { fotoClone.imgRisultante = (IImmagine)foto.imgRisultante.Clone(); } fotoClone.faseDelGiorno = foto.faseDelGiorno; fotoClone.giornata = foto.giornata; // il nome del file, lo memorizzo solamente relativo // scarto la parte iniziale di tutto il path togliendo il nome della cartella di base delle foto. // Questo perché le stesse foto le devono vedere altri computer della rete che // vedono il percorso condiviso in maniera differente. fotoClone.nomeFile = nomeFileClone; objContext.Fotografie.Add(fotoClone); objContext.SaveChanges(); ++conta; _giornale.Debug("Clonata nuova foto: " + foto.ToString() + " ora sono " + conta); } catch (Exception ee) { _giornale.Error("Non riesco ad inserire una foto clonata. Nel db non c'è ma nel filesystem si: " + fotoClone.nomeFile, ee); } return(foto); }