私は最初の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を使用する場合は、LOT(185,602ワードが最大のテストでした)をBody列に貼り付けることができます。私の問題は、NHibernateを使用してMVCサイトから保存しようとしています。
私が得る2つの主なエラーがあります:
String or binary data would be truncated. The statement has been terminated.
これは、「。Length(Int32.MaxValue)」オーバーライドを設定しなかった場合に発生します。
発生する2番目のエラー(長さが設定されている場合):
The length of the string value exceeds the length configured in the mapping/parameter.
私はこの時点で何をすべきかについてかなり混乱しています。私の目標は、非常に大きな文字列(記事全体)をSQL Serverに格納し(テスト用のSQLite、nvarchar(max)はSQLiteに好まれなかった)、それを元に戻す(そして編集する)ことができるようにすることです。 MVCサイト。
アップデート
@Cymenのリンクに従って私は試しました
.CustomSqlType("nvarchar(max)").Length(Int32.MaxValue).Nullable();
しかし、これはエラーにつながります:
The length of the string value exceeds the length configured in the mapping/parameter.
1201語(すべて「テスト」)を保存しようとしたとき。上記のマッピング「.Length(Int32.MaxValue)」の最後に長さを追加しても、同じエラーが発生します。
アップデート
私が使用しているバージョンを確認したかった:
FluentNHibernate.1.3.0.733
NHibernate.3.3.1.4000
Microsoft.AspNet.Mvc.4.0.20710.0
最終更新
Kierenはそれを正しかったので、私はそのプロパティを取得してサーバー上でmarkdownsharpを実行し、サーバー上の2番目のプロパティにデータを入力したことを完全に忘れていました。ですから、実際に爆発したのは、私がマッピングしなかった2番目のプロパティでした。申し訳ありません。