String nHibernate正在剥离一个特殊的角色

String nHibernate正在剥离一个特殊的角色,string,nhibernate,unicode,fluent-nhibernate,markdowndeep,String,Nhibernate,Unicode,Fluent Nhibernate,Markdowndeep,我曾经发布过这篇文章,但是我的信息有点太模糊了,所以我会再试一次 nHibernate/Fluent nHibernate似乎正在截断或“剥离”我提交到数据库的字符串中的某些字符。例如,如果我提交字符串This\nis\na\nblock\nof\ntext\n\with\nreturns,则\n符号表示回车。我希望这些数据保持不变,因为稍后,当数据被读回时,也就是数据将被 但是,我注意到,当数据库进行提交时,\n符号特别地被“剥离”。我一直在执行调试,直到ISession.SaveOrUpda

我曾经发布过这篇文章,但是我的信息有点太模糊了,所以我会再试一次

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

但是,我注意到,当数据库进行提交时,
\n
符号特别地被“剥离”。我一直在执行调试,直到
ISession.SaveOrUpdate(object)
,我可以确认数据在调试过程中没有发生任何变化。然后我去看数据库中的记录,它已经被去掉了这个符号

如果我在文本上使用
String.Replace(“\n”,“\\n”))
,它实际上会正常工作。但这似乎并不是一种智能的存储方式。这意味着我必须不断地记住哪些字段可能有这个问题,并在逻辑之间执行这些操作

nHibernate/Fluent nHibernate
中是否有我缺少的强制剥离此数据的设置

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

ASP.NET MVC视图(textarea)->此\nis\na\nblock\nof\ntext\n\with\n返回值

ASP.NET MVC模型(Json)->This\nis\na\nblock\nof\ntext\n\with\n返回值

ASP.NET MVC控制器参数->此\nis\na\nblock\nof\ntext\n\with\n返回值

ISession.SaveOrUpdate->This\nis\na\nblock\nof\ntext\n\n\with\n返回值

数据库记录->这是一个带返回的文本块


因此,问题显然发生在
ISession
级别

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


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

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

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

使用附加组件记录生成的sql。然后你就能找到问题所在。 +如果要在网页上显示数据,请不要忘记使用
replace(“\n”,“
”)

使用加载项记录生成的sql。然后你就能找到问题所在。
+如果要在网页上显示数据,请不要忘记使用
replace(“\n”,“
”)

我刚刚尝试了这个方法,我能够将回车换行符插入到nvarchar字段中,并且我成功地插入并读取了该字段,而没有截断。您是否验证了插入数据的SQL语句实际上缺少这些字符?这在数据库中是什么类型的字段?您使用的是哪种DBMS?是的,如果我在SQL Management Studio中手动插入,它会工作。我正在使用MS-SQL。该字段是一个
nvarchar(1024)
。当您说手动插入时,您的意思是从日志文件中获取nhibernate生成的sql语句并将其放入sms中,还是您自己手动创建insert语句?NHibernate生成一个insert语句,该语句在我的\r\n中,在日志文件中可见。你使用的是什么版本的NH和FNH?我使用的是NuGet最新版本的FNH。我不明白你的问题。如果我转到SQLManagementStudio并手动打开表,然后键入文本,它就会工作。如果我通过
ISession
插入记录,它将不起作用。我只是尝试了一下,我能够将回车换行符插入nvarchar字段,并且我成功地插入并读取了该字段,而没有截断。您是否验证了插入数据的SQL语句实际上缺少这些字符?这在数据库中是什么类型的字段?您使用的是哪种DBMS?是的,如果我在SQL Management Studio中手动插入,它会工作。我正在使用MS-SQL。该字段是一个
nvarchar(1024)
。当您说手动插入时,您的意思是从日志文件中获取nhibernate生成的sql语句并将其放入sms中,还是您自己手动创建insert语句?NHibernate生成一个insert语句,该语句在我的\r\n中,在日志文件中可见。你使用的是什么版本的NH和FNH?我使用的是NuGet最新版本的FNH。我不明白你的问题。如果我转到SQLManagementStudio并手动打开表,然后键入文本,它就会工作。如果我通过
ISession
插入记录,它就不起作用了。我觉得自己很愚蠢。是的,当从数据库输出回时,换行符是完整的。我从来没有想到数据库表会将这些内容保存为富文本,而不仅仅是字符串。为了补充这个主题,我遇到了同样的问题,无法理解SQL为什么不存储回车和行费