SQL「varchar型」のタイプの代わりに、「nvarchar型」であることを、文字列を設定します

StackOverflow https://stackoverflow.com/questions/2344717

  •  23-09-2019
  •  | 
  •  

質問

私は、次のマッピングを持っています:

public class LogEntryMap
{
    public LogEntryMap()
    {
        Map.Id(x => x.Id).GeneratedBy.Identity();
        Map(x => x.Context).CustomSqlType("varchar").Length(512);
    }
}

ただし、SQL Server 2008のデータベースを生成するSchemaExportを使用して、スクリプトが生成さ無視長さが非常に有効で、それは1の長さvarcharなってしまう

create table OV_SAC.dbo.[LogEntry] (
    Id BIGINT IDENTITY NOT NULL,
   Context varchar null,
   primary key (Id)
)

.CustomSqlType("varchar 512")は例外をスローします。そしてCustomSqlTypeを定義せずに、文字列がnvarcharにマッピングされる(Length性を尊重している)。

任意の提案ですか?

役に立ちましたか?

解決

の代わりにデフォルト.CustomType("AnsiString")とNHibernateはの使用"String"ではなくvarcharnvarcharを使用します。

他のヒント

あなたが規則を使用して検討することもでき代わりにnvarchar型のvarchar型にマップすることにあなたの文字列の のすべてのを望んだ場合:

/// <summary>
/// Ensures that all of our strings are stored as varchar instead of nvarchar.
/// </summary>
public class OurStringPropertyConvention : IPropertyConvention
{
    public void Apply(IPropertyInstance instance)
    {
        if (instance.Property.PropertyType == typeof (string))
            instance.CustomType("AnsiString");
    }
}

あなたマッピングは、単純なマッピングに戻って行くことができます

Map(x => x.Context);

だけを確認してくださいあなたが規則を使用する流暢NHを伝えるために覚えてます:

        var configuration = new Configuration();
        configuration.Configure();
        Fluently
            .Configure(configuration)
            .Mappings(m => m.FluentMappings
                .AddFromAssemblyOf<Widget>()
                .Conventions.Add<OurStringPropertyConvention>()
                )
            .BuildSessionFactory();

いやはやます。

Map(x => x.Context).CustomSqlType("varchar (512)");

create table OV_SAC.dbo.[LogEntry] (
    Id BIGINT IDENTITY NOT NULL,
   Context varchar (512) null,
   primary key (Id)
)

我々は、しかし、それはVARCHAR(30)として指定されている列の8000のフィールド長を設定し、オプションがNVARCHARを使用することを防止し、「(AnsiStringの「)」CustomType」を使用して発見しました。 8000 varchar型は、はるかに高速4000 nvarchar型よりも、それはまだ、SQLサーバーのオーバーヘッドを持つ巨大な問題を引き起こしています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top