我正在尝试创建我的第一个 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 管理工作室,我可以将很多(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 并在服务器上填充了第二个属性。所以这是我没有映射的第二个属性实际上正在爆炸,抱歉。