1

我发过一次,但我的信息有点太模糊了,所以我再试一次。

nHibernate/Fluent nHibernate似乎正在截断或从我提交到数据库的字符串中“剥离”某些字符。例如,如果我提交字符串This\nis\na\nblock\nof\ntext\n\with\nreturns,该\n符号代表回车。我希望这些保持不变,因为稍后,当数据被读回时,它将被MarkdownDeep解析

但是,我注意到\n当数据库提交时,该符号特别被“剥离”。我一直执行调试ISession.SaveOrUpdate(object),我可以确认数据没有改变,直到我可以明显地跟踪调试。但后来我去查看数据库中的记录,它已经被去掉了这个符号。

如果我String.Replace("\n","\\n"))在文本上使用它,它实际上会正常工作。但这似乎不是存储所有内容的明智方法。这意味着我必须不断记住哪些字段可能存在此问题并在中间进行逻辑处理。

是否有我遗漏的设置nHibernate/Fluent nHibernate强制它删除这些数据?

调试代码路径

按照我的代码路径,它是这样的。

ASP.NET MVC View (textarea) -> This\nis\na\nblock\nof\ntext\n\with\nreturns

ASP.NET MVC Model (Json) -> This\nis\na\nblock\nof\ntext\n\with\nreturns

ASP.NET MVC Controller Parameter -> This\nis\na\nblock\nof\ntext\n\with\nreturns

ISession.SaveOrUpdate -> This\nis\na\nblock\nof\ntext\n\with\nreturns

Database Record -> This is a block of text with returns

所以问题显然发生在这个ISession层面上。

4

2 回答 2

1

您如何实际验证 \n 不在数据库记录中?当您在 sql management studio 中查看记录时,您不会在视觉上看到 \n。如果您只是查询数据,它将看起来像一个空格。将该数据复制并粘贴到 notepad++ 中,并显示该字符串中存在的所有字符(我打赌您会看到新行)。

每当您像上面描述的那样在表格视图中手动插入 \n 时,这不是特殊字符。它是实际的文本'\n'。请注意 '\n' != char(10)。一个是特殊字符,另一个只是文本。

于 2011-05-20T18:14:10.713 回答
0

使用插件记录生成的 sql。然后你可以找到问题出在哪里。+ 如果您在网页上显示数据,请不要忘记使用replace("\n","<br/>").

于 2011-05-21T14:38:25.450 回答