sql-server - 流畅的 nhibernate SQL Server 2008 R2 Express 非常长的字符串保存问题

标签 sql-server fluent-nhibernate fluent-nhibernate-mapping sql-server-2008r2-express

我正在尝试创建我的第一个 NHibernate 项目,所以有可能我在这里做了一些愚蠢的事情,但是已经使用谷歌搜索了几天并且还没有任何乐趣。

我有一个具有各种属性的 Article 对象:

public class Article {
    public virtual string Title { get; set; }
    public virtual string Body { get; set; }
}

我正在使用流畅的配置来加载映射:
configuration.Mappings(m => m.AutoMappings.Add((AutoMap.AssemblyOf<Article>())
                            .Conventions.Add(DefaultCascade.All())
                            .UseOverridesFromAssemblyOf<SchemaConfigurationController>())

覆盖是:
public class ArticleOverrideMapping : IAutoMappingOverride<Article>
{
    public void Override(AutoMapping<Article> mapping)
    {
       //mapping.Map(x => x.Body).CustomSqlType("NVARCHAR(4000)");
       //mapping.Map(article => article.Body).Length(10000);
       //mapping.Map(article => article.Body).Length(Int32.MaxValue);            
       //mapping.Map(article => article.Body).CustomSqlType("NVARCHAR(max)");           
       //mapping.Map(article => article.Body).CustomSqlType("NVARCHAR(max)").Length(Int32.MaxValue);           
       mapping.Map(article => article.Body).CustomType("StringClob").CustomSqlType("NVARCHAR(max)");
    }
}

我已经尝试了每一行注释掉的行(大致按照我在网上找到可能的解决方案的顺序)。我可以让 SQL Server 创建 nvarchar(max) 列,如果我使用 SQL management studio,我可以将很多(185,602 个字是最大的测试)粘贴到 Body 列中。我的问题是尝试使用 NHibernate 从 MVC 站点保存它。

我得到两个主要错误:
String or binary data would be truncated.  The statement has been terminated.

如果我没有设置“.Length(Int32.MaxValue)”覆盖,就会发生这种情况。

发生的第二个错误(设置长度时):
The length of the string value exceeds the length configured in the mapping/parameter.

我现在很困惑我应该做什么。我的目标是能够在 SQL Server(和用于测试的 SQLite,SQLite 不喜欢 nvarchar(max))中存储一个非常大的字符串(整篇文章)并将其取回,(并对其进行编辑) MVC 网站。

更新

根据@Cymen 的链接,我尝试过
.CustomSqlType("nvarchar(max)").Length(Int32.MaxValue).Nullable();

但这导致错误:
The length of the string value exceeds the length configured in the mapping/parameter. 

当我只尝试保存 1201 个单词时(所有单词“test”)。当我在上述映射“.Length(Int32.MaxValue)”的末尾添加长度时,我仍然出现同样的错误。

更新

想确认我正在使用哪些版本:
 FluentNHibernate.1.3.0.733
 NHibernate.3.3.1.4000
 Microsoft.AspNet.Mvc.4.0.20710.0

最终更新

Kieren 说得对,我完全忘记了我使用了该属性并在服务器上对其运行了 markdownsharp 并在服务器上填充了第二个属性。所以这是我没有映射的第二个属性实际上爆炸了,抱歉。

最佳答案

这就是我通常处理它的方式。
mapping.Map(x => x.Problem).CustomType("varchar(MAX)");
不知道 CustomSqlType 是什么,但我从未使用过它,这有效。

关于sql-server - 流畅的 nhibernate SQL Server 2008 R2 Express 非常长的字符串保存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13387081/

相关文章:

c# - 流利的 NHibernate 级联删除不起作用

c# - NHibernate - 如何从多对多关系中删除一个项目?

sql - 联合和联合所有

sql - 简单的动态 SQL 查询语法

sql - SQL 中两个日期之间的确切小时数差异

c# - Fluent 和 NHibernate 的泛型

sql-server - SQL Server 如何在 HAVING 子句中使用 COUNT DISTINCT(*)?

c# - NHibernate 3 或 4 等同于 Entity Framework Include

使用 Fluent NHibernate 设置类映射

c# - Fluent Nhibernate List<string> 映射