ServiceStack.OrmLite:StringLengthAttribute.MaxText 产生 "LONGTEXT" - 我如何设置为 "TEXT"?

ServiceStack.OrmLite: StringLengthAttribute.MaxText produces "LONGTEXT" - how can I set to "TEXT"?

使用 ServiceStack 的 OrmLite 并使用以下属性装饰 属性,创建一个 LONGTEXT 类型的列,而不是文档中所述的文本:

但是变成了LONGTEXT:

我尝试将 StringLenghtAttribute 设置为其他内容,6553570000Int32.MaxValue 等,但它要么将其解释为 VARCHAR 并给了我 Column length too bigRow size too large,或者它变成了 LONGTEXT。

问题是:如何强制它变成“TEXT”(或 mysql 中的任何其他文本类型)?

我也许可以修改 MaxColumnDefinition 并将其设置为 TEXT 但我认为我永远不会得到 LONGTEXT。

更新

MaxColumnDefinition 设置为 TEXT 并没有改变任何事情。

我可以用属性修饰 class 并以某种方式指定类型吗?还是那也是 sql-特定于版本的?

或者也许我应该覆盖 GetColumnDefinition 并实现我自己的逻辑...

(请注意,此解决方案会产生其他问题,我将在单独的 SO post 中提出这些问题)

经过更多研究,解决了创建我自己的 StringConverter 的问题,如下所示:

public class MyStringConverter : StringConverter
{
    public override string GetColumnDefinition(int? stringLength)
    {
        if (stringLength.GetValueOrDefault() == StringLengthAttribute.MaxText)
            return MaxColumnDefinition;

        if (stringLength.GetValueOrDefault(StringLength) <= 255)
        {
            return UseUnicode
            ? $"NVARCHAR({stringLength.GetValueOrDefault(StringLength)})"
            : $"VARCHAR({stringLength.GetValueOrDefault(StringLength)})";
        }
        else if (stringLength.GetValueOrDefault(StringLength) <= 65535)
        {
            return $"TEXT";
        }
        else
        {
            return "LONGTEXT";
        }
    }
}

我还建议将默认的 StringLength 设置为小于默认的 8000:

StringConverter converter = OrmLiteConfig.DialectProvider.GetStringConverter();
converter.StringLength = 255;

这样,默认的 string 将是 varchar(255)。如果你想把特定的字符串属性做成别的东西,那么根据MyStringConverter:

设置属性
type = typeof(tWorks.Core.CoreCommons.ContactModuleProtocols.SMS.ModuleSettingsSMS);
type.GetProperty(nameof(MyClass.Prop1)).AddAttributes(new StringLengthAttribute(255)); // ==> varchar(255)
type.GetProperty(nameof(MyClass.Prop2)).AddAttributes(new StringLengthAttribute(500)); // ==> TEXT
type.GetProperty(nameof(MyClass.Prop3)).AddAttributes(new StringLengthAttribute(70000)); // ==> LONGTEXT