Сохранение FlowDocument в SQL Server

Мне нужно сохранить WPF FlowDocuments на SQL Server. Какой лучший формат для этого? Строка? Blob? Имеет ли значение в документе менее 5 тысяч слов или около того?

2 ответа

Решение

Если вы просто хотите сохранить объекты FlowDocument в базе данных без какой-либо обработки, я бы порекомендовал использовать двоичную сериализацию и сохранить полученный байтовый массив в varbinary(max). Это быстро и хорошо масштабируется.

Однако, если у вас уже есть FlowDocuments в виде XML-файлов, было бы проще просто скопировать их в поле nvarchar(max) без лишних (добавленных) издержек сериализации / десериализации. Это масштабируется тривиально для значений менее 8 КБ, а затем выполняется вроде ОК, пока вы не достигнете отметки 10 МБ.

FlowDocument не сериализуем, поэтому ответ SWeko выше не будет работать. Вы можете использовать методы ниже, чтобы получить FlowDocument в и из строки Xaml, которая затем может быть сохранена в базе данных с помощью nvarchar(max).

    var stringReader = new StringReader(info);
    var xmlTextReader = new XmlTextReader(stringReader);
    return (FlowDocument)XamlReader.Load(xmlTextReader);

а также

    var infoString = XamlWriter.Save(info);

Вы можете сериализовать FlowDocument с помощью класса TextRange. Вы даже можете использовать формат RTF. Сохранение:

FlowDocument docToSave; // Lets suppose this var is initialized.
var tr = new TextRange(docToSave.ContentStart,docToSave.ContentEnd);
var dst = new MemoryStream();
tr.Save(dst, DataFormats.Rtf);
dst.Close();

И загрузка:

FlowDocument docToLoad = new FlowDocument();
var tr = new TextRange(docToLoad.ContentStart,docToLoad.ContentEnd);
Stream src; // Lets suppose it is initialized.
tr.Load(src, DataFormats.Rtf);
src.Close();

См. Также https://www.wpf-tutorial.com/rich-text-controls/how-to-creating-a-rich-text-editor/

Другие вопросы по тегам