ServiceStack.OrmLite中的ntext

meh*_*dad 8 c# sql-server code-first servicestack ormlite-servicestack

我怎样才能在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; } 

}
Run Code Online (Sandbox Code Playgroud)

如果我使用字符串数据类型,ormlite在数据库中生成nVarchar(8000)

我需要超过8000个字符的数据

Rya*_*tes 4

您需要将Body类型转换byte[]stringServiceStack.OrmLite 才能使用varchar(max)列类型。像下面这样:

public byte[] Body { get; set; }
Run Code Online (Sandbox Code Playgroud)

其原因在于 ServiceStack.OrmLite 代码中。

在文件ServiceStack.OrmLite/OrmLiteDialectProviderBase.cs中,方法如下InitColumnTypeMap()

DbTypeMap.Set<byte[]>(DbType.Binary, BlobColumnDefinition);
Run Code Online (Sandbox Code Playgroud)

在文件ServiceStack.OrmLite.SqlServer/SqlServerOrmLiteDialectProvider.cs下,方法SqlServerOrmLiteDialectProvider()为:

base.BlobColumnDefinition = "VARBINARY(MAX)";
Run Code Online (Sandbox Code Playgroud)

从这段代码中,您可以看到从 C# 类型到内部 ServiceStack.OrmLite 类型的内部映射,然后返回到 SqlServer 类型。

这个问题解释了如何在字符串和字节数组之间来回转换,如何在 C# 中获得一致的字符串字节表示而不手动指定编码?