In Datasets gab es eine Methode WriteXml oder ReadXmlWie wird ObjectContext in XML wie in DataSets (XML-Datenbank) serialisiert?
Hat jemand eine Idee, wie dies mit Entity Framework? Hat das schon mal jemand implementiert?
In Datasets gab es eine Methode WriteXml oder ReadXmlWie wird ObjectContext in XML wie in DataSets (XML-Datenbank) serialisiert?
Hat jemand eine Idee, wie dies mit Entity Framework? Hat das schon mal jemand implementiert?
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
Ein ObjectContext ist nichts wie ein DataSet. Es macht keinen Sinn über Serialisierung zu sprechen.
Aber der ObjectContext ist nicht Ihre Datenbank. Und wirst du es deserialisieren? –
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