Вы можете сериализовать содержимое таблицы БД с помощью следующего кода:
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 }=)
не работает, потому что анонимный тип не имеет конструктора без параметров.