sql-server – 流畅的nhibernate SQL Server 2008 R2 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管理工作室,我可以将一个LOT(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网站.

UPDATE

按照@ 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说得对,我完全忘记了我拿了那个属性并在服务器上运行了markdownnsharp并填充了服务器上的第二个属性.所以这是我没有绘制的第二个属性实际上已经爆炸了,抱歉.

最佳答案 这就是我通常处理它的方式.

mapping.Map(x => x.Problem).CustomType(“varchar(MAX)”);

不确定CustomSqlType是什么,但我从来没有使用它,这是有效的.

点赞