4

私は最初の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番目のプロパティでした。申し訳ありません。

4

2 に答える 2

1

これは私が通常それを処理する方法です。

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

CustomSqlTypeが何であるかはわかりませんが、私はこれを使用したことがなく、これは機能します。

于 2012-11-14T23:54:31.340 に答える
1

さて、皆さん。同じことなので、私はいくつかのテストを行いました。

int.MaxValueは流暢なLENGTHとして使用できないようです。これを行うと、結果の作成SQLはnvarchar(255)になります。したがって、nhibernate(流暢)がまだそのようなスクリプトを生成する場合、彼は最大で255文字を待機しています。

int.MaxValue / 2を使用する場合は、すべて問題ありません。少なくともスクリプトでは。 合理的な説明のみ:ユニコード文字列。したがって、1文字の流暢さは自動的に2バイトかかります。したがって、内部的に流暢な休止状態は2倍になる可能性があります。2GBを超えると、流暢なことが何をするかを誰が知っていますか。

データでも動作するかどうか教えてください。

于 2014-03-23T17:09:25.563 に答える