[英]ntext in ServiceStack.OrmLite
我怎樣才能在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)
我需要超過8000個字符的數據
您需要從ServiceStack.OrmLite的string
將Body
類型轉換為byte[]
以使用varchar(max)
列類型。 像下面這樣的東西:
public byte[] Body { get; set; }
其原因在於ServiceStack.OrmLite代碼。
在ServiceStack.OrmLite / OrmLiteDialectProviderBase.cs文件中, InitColumnTypeMap()
方法是:
DbTypeMap.Set<byte[]>(DbType.Binary, BlobColumnDefinition);
在ServiceStack.OrmLite.SqlServer / SqlServerOrmLiteDialectProvider.cs文件中, SqlServerOrmLiteDialectProvider()
方法是:
base.BlobColumnDefinition = "VARBINARY(MAX)";
從此代碼中,您可以看到內部映射從C#類型發生到內部ServiceStack.OrmLite類型,然后返回到SqlServer類型。
這個問題解釋了如何在字符串和字節數組之間來回轉換, 如何在不手動指定編碼的情況下在C#中獲得字符串的一致字節表示? 。
假設你真的想要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
聲明。
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.