Наиболее эффективная XML-сериализация Entity Framework - PullRequest
0 голосов
/ 11 сентября 2018

Вы можете сериализовать содержимое таблицы БД с помощью следующего кода:

using (var db = new MyEntities()) {
    var all = db.MyTable.AsQueryable();
    using (XmlWriter writer = XmlWriter.Create(path)) {
        DataContractSerializer serializer = new DataContractSerializer(all.GetType());
        serializer.WriteObject(writer, all);
    }
}

Однако это создает «уродливый» XML-файл со многими ненужными атрибутами.

Вы также можетесделать это, чтобы создать более симпатичный XML-файл (но все же в заголовке все же много xmlns):

using (var db = new MyEntities()) {
    var all = db.MyTable.ToList();
    using (XmlWriter writer = XmlWriter.Create(path)) {
        XmlSerializer serializer = new XmlSerializer(all.GetType());
        serializer.Serialize(writer, all);
    }
}

AsQueryable не работает с XmlSerializer, поэтому вы должны использовать .ToList().Тем не менее, это считывает всю таблицу в память, что не очень эффективно для больших наборов данных.

Поэтому возникает вопрос: как я могу создать «чистый» XML-файл из таблицы, используя Entity Framework (Database First)наиболее эффективно (без необходимости читать все в память)?

Бонусный вопрос: Как бы вы сериализовали только определенные столбцы из таблицы?Использование .Select(t => new { t.Column1, T.Column2 }=) не работает, потому что анонимный тип не имеет конструктора без параметров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...