Login Register
domenica 20 maggio 2012
 
Forums

I Forum di WPF Tips & Tricks
[wpf] modelfirst, xmlserialize, backup
Last Post 31 gen 2012 11:20 by hidden. 1 Replies.
Printer Friendly
Sort:
PrevPrev NextNext
You are not authorized to post a reply.
Author Messages Resolved
hidden
Posts:64
Avatar

--
31 gen 2012 07:52  
Salve a tutti sto incontrando un problema con il mio programma.

Ho fatto un programma utilizzando l'approccio modelfirst. Dopo aver sviluppato il mio programma vorrei creare una funzione che mi faccia il backup dei dati contenuti nel database. Per farlo ho pensato di utilizzare XmlSerializer

Tengo a precisare che il database e tutto relazionato è che in testa a tutte le tabelle c'è una tabella di partenza. NOn so se mi sono spiegato, cerco di esprimermi con un esempio la tabella1 ha relazione 1 a molti con la tebella2 che ha relazione 1 as molti con la tabella3 e tabella4 e così via.

Ottenendo un record della tabella1 ottengo anche tutti gli altri collegati in gerarchia. Perciò il codice che ho utilizzato è il seguente:


Dim context As New TerritoriEntities(GetConnectionString)
Dim savedialog As New Microsoft.Win32.SaveFileDialog()
savedialog.DefaultExt = "xml"
savedialog.Filter = "MyFiles Backup (*.xml)|*.hls|All files (*.*)|*.*"
Dim risposta = savedialog.ShowDialog
If risposta = True Then
Dim ObjectStreamWriter As New StreamWriter(savedialog.FileName)
Dim textwriter As XmlTextWriter
Dim ObjSerializer As New XmlSerializer(GetType(ObjectSet(Of TipologiaTerritorio)))

Dim CryptoAlgo As New DESCryptoServiceProvider()
Dim Cryptographer As System.Security.Cryptography.CryptoStream
CryptoAlgo.BlockSize = 64
CryptoAlgo.KeySize = 64
Dim rgbKey() As Byte = New UnicodeEncoding().GetBytes("MyString")
Dim rgbIV() As Byte = New UnicodeEncoding().GetBytes("MyOtherString")

Cryptographer = New System.Security.Cryptography.CryptoStream(ObjectStreamWriter.BaseStream, CryptoAlgo.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write)

textwriter = New XmlTextWriter(Cryptographer, New System.Text.UTF8Encoding())

ObjSerializer.Serialize(textwriter, context.TipologieTerritorio)
textwriter.Close()
End If



L'ho sempre utilizzato per le liste di classi ma con objectset non funziona in quanto mi da il seguente errore:

Per essere XML serializzabili, i tipi che ereditano da IEnumerable devono avere un'implementazone di Add(System.Object) a tutti i livelli della gerarchia di ereditarietà. System.Data.Objects.ObjectSet`1[[HHDLocationSystem.TipologiaTerritorio, HHDLocationSystem, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] non implementa Add(System.Object).

Ed in realtà ha ragione in quanto l'oggetto ObjectSet(0f T) non implementa il metodo Add. Perciò sono andato nel designer della classe TerritoriEntities e mi sono accorto che in realtà l'oggetto che io passo al serializer context_TipologiETerritorio (che rappresenta l'ObjectSet) della classe TipologiATerritorio non implementa il metodo Add.

Come posso aggirare l'ostacolo. Avevo pensato di passare una lista degli oggetti anzichè l'objectset ma la lista non mi da l'intera gerarchia con tutti i sotto elementi.

Altrimenti sarei costretto a creare tante liste quante sono le tabelle(entityset), serializzarle tutte e passarle tutte allo stesso file, e nel recupero separare i dati per lista ed aggiungere una lista per volta in base alla gerarchia. Metodo un pò pasticciato.

Un'altra soluzione che avevo pensato era creare una classe bakup che come proprietà avesse delle List delle varie entità di cui voglio fare il bakcup e alla fine fare la serializzazione della classe bacup.

Nella deserializzazione poi vado ad aggiungere per ogni objectset le varie liste.

Che ne pensate come idea? Potrebbe essere buona o anch'essa un pò pasticciata?

Grazie

Francesco Valentino
hidden
Posts:64
Avatar

--
31 gen 2012 11:20  
Ho risolto il problema utilizzando una classe ad hoc.

La classe che ho chiamato Backup ha come proprietà delle liste delle varie entità che si trovano nella mia classe Entities.

Così quando lancio il costruttore lui automaticamente mi valorizza le varie proprietà popolando le liste con i date del contextobject e pio serializzo il tutto.
Per la deserializzazione faccio il processo inverso.

Grazie
Francesco Valentino
You are not authorized to post a reply.

Active Forums 4.2
  
hd porn
 
© 2009-2011 WPF Tips&Tricks Team - Visual Basic Tips&Tricks Network
 
porno izleporno izle