Antwort

0

Nun im Grunde möchte ich eine Sicherung meiner Datenbank in XML haben, und ich möchte nicht, dass diese Sicherung vom Server, sondern von der Anwendung verarbeitet wird.

Ich denke, ich werde das Ereignis behandeln, das im Kontext ausgelöst wird und dann meine Daten speichern.

Wie ich die XML-Datei Größe expext nicht passen zu wachsen (wird wie 100-300 kleine Entitätsdatensätze von einfachen Typen kurzer Daten halten), habe ich beschlossen, synchron gegen die XML DB zu arbeiten:

Hier ist die Teilklasse des stark typisierte dta Satzes:

Imports System.Xml 
Partial NotInheritable Class XmlDatabas : Inherits Data.DataSet 
    Private ReadOnly XmlFileName As String = _ 
      My.Application.Info.DirectoryPath & "\Data.xml" 

    Private Sub SeawaveData_Initialized(sender As Object, e EventArgs) _ 
       Handles Me.Initialized 
     If Not IO.File.Exists(XmlFileName) Then WriteXml(XmlFileName) 
     ReadXml() 
    End Sub 

    Public Shadows Sub AcceptChanges() 
     MyBase.AcceptChanges() 
     WriteXml() 
    End Sub 

    Public Overloads Sub ReadXml() 
     ReadXml(XmlFileName) 
    End Sub 

BTW, wenn Sie sich selbst die Mühe, so dass ich auch einen schnellen perfoance Test gemacht nur einen Hinweis zu bekommen (verlassen Sie sich nicht, es ist ein sehr abstrakter Test, Test erneut wenn Sie jemals beabsichtigen, einen XmlDb größerer Dateien zu erstellen!). Beachten Sie auch, dass diese Datei die XML-Datei nicht für externe Änderungen testet, kann für eine Win-Anwendung gut sein, in ASP.NET oder wenn Sie Mehrfachanforderungen zulassen möchten, können Sie eine Überprüfung der Änderungen für die vorhandene Anwendung implementieren oder eine DAL-DLL erstellen, die eine Reihe von Änderungen enthält.

Module Program 
    Sub Main() 
     Using ds As New XmlDb 
      Dim longString = "" 
      For index As Integer = 1 To 250 
       longString &= "aaaaaaaaaaaaaaaaaaaaaaaaa" 
      Next 
      Dim step1 = Now 
      For index As Integer = 1 To Short.MaxValue 
       ds.Account.AddAccountRow(index.ToString, longString, True, True, _ 
        longString, "", "", longString, longString, longString, _ 
        longString, longString, longString, longString, longString, _ 
        longString) 
      Next 
      Dim step2 = Now 
      ds.AcceptChanges() 
      Dim step3 = Now 
      Console.WriteLine("step 1 took: {0:T}", step2 - step1) 
      Console.WriteLine("step 2 took: {0:T}", step3 - step2) 
      Console.WriteLine("entire operation took: {0:T}", step3 - step1) 
     End Using 
     Stop 
    End Sub 
End Module 
    Public Overloads Sub WriteXml() 
     WriteXml(XmlFileName) 
    End Sub 
End Class 

Results: 
step 1 took: 00:00:01.3390000 
step 2 took: 00:00:23.5280000 
entire operation took: 00:00:24.8670000 

24,8 Sekunden lang, großer ah? wollen Sie hören, wie groß ist die XML-Datei? 2062857146 MB

+0

Aber der ObjectContext ist nicht Ihre Datenbank. Und wirst du es deserialisieren? –

+0

Sie haben Recht Ich weiß nicht was ich sagen soll, haben Sie irgendwelche guten Ideen? Vielleicht speichere ich im SavingChanges-Event den Tabellennamen, die Zeilen-ID, die Zeitspanne jeder Verpflichtung für die Datenbank und habe einen Win-Service, der diese Zeilen der XML-Datenbank hinzufügt, parallel dazu, wenn der Server ausgefallen ist ein Problem. Ich suche im Grunde nach einer Möglichkeit, den Objektkontext mit zwei DBs zu arbeiten: sql und xml, werden sie beide synchronisiert, wenn der Server heruntergefahren ist, geht er nach xml und synchronisiert dann sql mit xml, etwas ähnliches. – Shimmy

0

Ein ObjectContext ist nichts wie ein DataSet. Es macht keinen Sinn über Serialisierung zu sprechen.

+0

Ich weiß, daher habe ich gefragt, ob es jemanden da draußen gibt, der solche Sachen implementiert hat, denn wenn es nicht ist, muss ich ihn sein – Shimmy

+0

Was würdest du überhaupt serialisieren? –

+0

alles, string, objekte alles – Shimmy

Verwandte Themen