我需要将WPF FlowDocuments保存到SQL Server。这样做的最佳格式是什么?串? BLOB?在一个不到5K字左右的文件中是否重要?
答案 0 :(得分:5)
如果您只想将FlowDocument对象存储在数据库中而不进行任何处理,我建议使用二进制序列化,并将生成的字节数组存储到varbinary(max)中。这很快并且可以很好地扩展。
但是,如果已经将FlowDocuments作为XML文件,那么将它们转储到nvarchar(max)字段会更容易,没有(添加)序列化/反序列化开销。对于低于8k的值,这可以轻松地进行缩放,然后执行有点确定,直到达到10MB左右。
答案 1 :(得分:5)
FlowDocument不可序列化,因此上面的SWeko答案不起作用。 您可以使用以下方法从一个Xaml字符串获取FlowDocument,然后使用nvarchar(max)将其保存在数据库中。
var stringReader = new StringReader(info);
var xmlTextReader = new XmlTextReader(stringReader);
return (FlowDocument)XamlReader.Load(xmlTextReader);
和
var infoString = XamlWriter.Save(info);
答案 2 :(得分:1)
您可以使用TextRange类序列化FlowDocument。您甚至可以使用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/