Как сериализовать ObjectContext в XML, как в DataSets (база данных XML)? - PullRequest
1 голос
/ 09 июля 2009

В наборах данных был метод WriteXml или ReadXml

Кто-нибудь знает, как это сделать с Entity Framework? Кто-нибудь реализовывал это раньше?

Ответы [ 2 ]

0 голосов
/ 09 июля 2009

Ну, в общем, я хочу создать резервную копию своей базы данных в формате XML, и я не хочу, чтобы эта резервная копия была обработана с сервера, а из приложения.

Я думаю, что обработаю событие, которое запускается в контексте, а затем сохраню свои данные.

Поскольку я исключаю, что размер файла xml не будет слишком соответствовать (будет содержать 100-300 записей небольших сущностей простых коротких типов данных), я решил работать синхронно с БД XML:

Вот частичный класс строго типизированного набора dta:

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

Кстати, если вы беспокоитесь о себе, так что я даже сделал быстрый тест на перфорацию, просто чтобы получить указание (не надейтесь, это очень абстрактный тест, попробуйте еще раз, если вы когда-нибудь намереваетесь создать XmlDb больших файлов!) , учтите также, что этот файл не проверяет XML-файл на наличие внешних изменений, может быть полезен для приложения win, в ASP.NET или если вы хотите разрешить множественные запросы, рассмотрите способ реализации проверки изменений в существующем приложении, или создание библиотеки DAL DLL с очередью внесения изменений.

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 секунды , а? хочешь услышать, насколько большой файл XML? 2062857146 байт, что составляет 1967,2938785553 МБ

0 голосов
/ 09 июля 2009

ObjectContext не имеет ничего общего с DataSet. Нет смысла говорить о сериализации.

...