Сохранение 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/