gpt4 book ai didi

mysql - ServiceStack.OrmLite : Implementing custom StringConverter affects column type of complex BLOB fields

转载 作者:行者123 更新时间:2023-11-30 21:41:10 24 4
gpt4 key购买 nike

在之前的SO question当我的 POCO 中有字符串属性时,我询问如何更改 MySql 列类型。

我自己回答的答案是实现我自己的 StringConverter。我认为这是一种可以接受的方法。

然而,在my answer ,我注意到不仅我的 string 属性受到影响,所有那些复杂的属性以及 OrmLite 将它们作为 JSON 进行 BLOB 的地方也受到影响。

MySQL中那些复杂列的字段类型也变成了varchar(255),当然不会持续很长时间。

StringConverter 非常简短:

  • 我说过默认字符串长度是 255:
StringConverter converter = OrmLiteConfig.DialectProvider.GetStringConverter();
converter.StringLength = 255;
  • 我希望定义为 255 个字符或更小的字符串属性为 varchar(255)
  • 字符串属性定义为 > 255 和 < 65535 为 text
  • 字符串 props 定义为 >= 65535 为 longtext

我的字符串转换器:

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

但是,如上所述,一个看起来像这样的属性(ActionInfo 只包含一些字符串和列表):

public List<ActionInfo> _AvailableActions { get; set; }

使用 MyStringConverter 时生成了这样的表格:

enter image description here

如果不使用MyStringConverter,该列将变成longtext

问题是:我错过了什么?我仍然希望复杂的 BLOB 字段变成长文本,以便可以完成 JSON BLOBing。我希望 StringConverter 只影响字符串属性?

最佳答案

blob 复杂类型的列定义应该使用 ReferenceTypeConverter默认解析为 DialectProvider.GetStringConverter().MaxColumnDefinition;

您应该继承特定于 RDBMS 的 MySqlStringConverter如果你想改变 MySQL Strings 的字符串行为,否则你将恢复到继承使用 VARCHAR(8000) 的通用 RDBMS 行为。用于字符串和 MaxColumnDefinition .

或者,您可以覆盖 MaxColumnDefinition在你自己的字符串转换器中:

public override string MaxColumnDefinition => "LONGTEXT";

关于mysql - ServiceStack.OrmLite : Implementing custom StringConverter affects column type of complex BLOB fields,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51499339/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com