8

最初に 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; } 

}

string datatype を使用する場合、ormlite はデータベースに nVarchar(8000) を生成します

データに 8000 文字以上必要です

4

2 に答える 2

2

あなたが本当に欲しいと仮定しますNTEXT。必要な場合、nvarchar(max)またはhttps://stackoverflow.com/a/25729568/37055varchar(max)を参照する場合

ドメインモデルを装飾する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宣言を理解するカスタム方言プロバイダーを使用します。

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;
  }
}

データベース ファクトリを構築するときにプロバイダーを使用する

var dbFactory = new OrmLiteConnectionFactory(conStr, NTextSqlProvider.Instance);
于 2014-09-08T17:19:21.090 に答える