8

まず、ServiceStack.OrmLiteコードでnTextデータ型を持つことができますか?ServiceStack.OrmLiteのntext

public class Email 
{ 
    [AutoIncrement] 
    public long ID { get; set; } 


    public DateTime Date { get; set; } 

    public string From { get; set; } 

    public string Subject { get; set; } 

    nText => 
    public string Body { get; set; } 

} 

私は文字列データ型を使用する場合、ormlite NVARCHAR(8000)を生成するデータベース

に私はあなたがServiceStackためstringからbyte[]にごBodyタイプを変換する必要があるデータ

+0

C#の文字列データ型を構築する際

public class NTextSqlProvider : SqlServerOrmLiteDialectProvider { public new static readonly NTextSqlProvider Instance = new NTextSqlProvider(); public override string GetColumnDefinition(string fieldName, Type fieldType, bool isPrimaryKey, bool autoIncrement, bool isNullable, int? fieldLength, int? scale, string defaultValue) { var fieldDefinition = base.GetColumnDefinition(fieldName, fieldType, isPrimaryKey, autoIncrement, isNullable, fieldLength, scale, defaultValue); if (fieldType == typeof (string) && fieldLength > 8000) { var orig = string.Format(StringLengthColumnDefinitionFormat, fieldLength); fieldDefinition = fieldDefinition.Replace(orig, "NTEXT"); } return fieldDefinition; } } 

は、プロバイダを使用しntext型の罰金です。ユニコード文字を含むことができ、任意の長さの文字列を保持することができます。 – Andomar

+6

新しい開発に 'text'、' ntext'または 'image'を使わないでください - これらのデータ型は[非推奨]です(http://msdn.microsoft.com/en-us/library/ms187993.aspx)。 'varchar(MAX)'、 'nvarchar(MAX)'、 'varbinary(MAX)'をそれぞれ使用します。これらのタイプの使用方法については、ORMのマニュアルを参照する必要があります。 –

+0

@JonSeigelのコメントをサポートしています。 Ormliteの属性を使って長さを指定できます。 – kunjee

答えて

4

のための8000以上の文字が必要.OrmLiteを使用してvarchar(max)列型を使用します。以下のようなものがあります。

public byte[] Body { get; set; } 

この理由は、ServiceStack.OrmLiteコード内にあります。方法InitColumnTypeMap()下のファイルServiceStack.OrmLite/OrmLiteDialectProviderBase.cs

は、次のとおりです。ファイルServiceStack.OrmLite.SqlServer/SqlServerOrmLiteDialectProvider.cs

DbTypeMap.Set<byte[]>(DbType.Binary, BlobColumnDefinition); 

、方法SqlServerOrmLiteDialectProvider()下にある:このコードから

base.BlobColumnDefinition = "VARBINARY(MAX)"; 

、あなたはその内部を見ることができますC#型から内部のServiceStack.OrmLite型へのマッピングが行われてから、SqlServer型に戻ります。

この質問は、文字列とバイト配列の間で前後に変換する方法、How do I get a consistent byte representation of strings in C# without manually specifying an encoding?について説明しています。あなた本当にを想定し

2

NTEXTをしたいです。あなたはnvarchar(max)またはvarchar(max)https://stackoverflow.com/a/25729568/37055

System.ComponentModel.DataAnnotations.StringLengthAttribute

[StringLengthAttribute(8001)] 
public string Markdown { get;set; } 

または

[StringLength(Int32.MaxValue)] 
public string Markdown { get;set; } 

として最大の長さに超えて8000より大きい任意の長さを使用してドメインモデルを飾る見たい場合SQL Server varchar/nvarchar列タイプ。

NTEXT宣言を理解しているカスタムの方言プロバイダを使用してください。データベース・工場

var dbFactory = new OrmLiteConnectionFactory(conStr, NTextSqlProvider.Instance); 
関連する問題