DotNetNext / SqlSugar

.Net aot ORM Fastest ORM Simple Easy VB.NET Sqlite orm Oracle ORM Mysql Orm 虚谷数据库 postgresql ORm SqlServer oRm 达梦 ORM 人大金仓 ORM 神通ORM C# ORM , C# ORM .NET ORM NET5 ORM .NET6 ORM ClickHouse orm QuestDb ,TDengine ORM,OceanBase orm,GaussDB orm ,Tidb orm Object/Relational Mapping
https://www.donet5.com/Home/Doc
MIT License
5.19k stars 1.32k forks source link

配置实体 自带特性 如何配置 ColumnDataType 这个属性 #1189

Closed AtlantisDe closed 10 months ago

AtlantisDe commented 10 months ago

配置实体 自带特性 如何配置 ColumnDataType 这个属性

只能手动配置到那个属性上?

我想用代码实现去适配.

DotNetNext commented 10 months ago

https://www.donet5.com/Home/Doc?typeId=1182 实体配置看标题3

DotNetNext commented 10 months ago

column.DataType = "text"; 应该是 DateType

DotNetNext commented 10 months ago

名字和SugarColumn有点不一样

AtlantisDe commented 10 months ago

名字和SugarColumn有点不一样

这个我试过了还是不行呢 column.DataType = "text"; 应该是 DateType

DotNetNext commented 10 months ago

这个是建表用的, 不清楚你想要什么

DotNetNext commented 10 months ago

column.DataType=StaticConfig.CodeFirst_BigString 大文本用这个

DotNetNext commented 10 months ago

如果是普通的字符串不需要设置column.DataType 只要设置Length=255

DotNetNext commented 10 months ago

https://www.donet5.com/Home/Doc?typeId=2366 还有问题按模版提供可以让我看懂你是什么问题的DEMO

DotNetNext commented 10 months ago

现在我根本不知道你要什么,你在问题在哪儿

DotNetNext commented 10 months ago

你是要设置数据库的类型,还是要设置SqlParameter的 DbType

AtlantisDe commented 10 months ago

你是要设置数据库的类型,还是要设置SqlParameter的 DbType

我要设置数据库表里面的字段类型 比如

[SugarColumn(ColumnDataType = "text", IsNullable = true)]

public class MyTable
{
    [SugarColumn(ColumnDataType = "longtext")]
    public string LongTextColumn { get; set; }

    [SugarColumn(ColumnDataType = "mediumtext")]
    public string MediumTextColumn { get; set; }

    [SugarColumn(ColumnDataType = "text")]
    public string TextColumn { get; set; }
}

默认情况下,您这边就是这样实现字段类型,配置.

因为我现在在做,自定义实体,字段类型适配时候,没法用代码去实现.
我试过了很多个字段类型
没有找到对于 ColumnDataType 
//简单来说就是我希望我这边自己自定义 数据库字段类型目前我用EF 它会根据长度适配
TEXT 最大存储容量为 65,535 字节
MEDIUMTEXT 最大存储容量为 16,777,215 字节(约 16 MB)
LONGTEXT 最大存储容量为 4,294,967,295 字节(约 4 GB)
//这些类型,但是您这边库只要字符串长度大于比如 3000 就默认就是
//LONGTEXT 类型了 好像. 所以我需要做适配.
DotNetNext commented 10 months ago
new SqlSugarClient(new ConnectionConfig()
            {
                DbType = SqlSugar.DbType.SqlServer,
                ConnectionString = Config.ConnectionString,
                InitKeyType = InitKeyType.Attribute,
                IsAutoCloseConnection = true,
                ConfigureExternalServices = new ConfigureExternalServices()
                {
                    EntityService = (x, y) =>
                    {
                        if (你的特性长度)//这边可以打个断点是否进来
                            y.DataType = "text";
                       if (你的特性长度)//这边可以打个断点是否进来
                            y.DataType = "mediumtext";
                       if (你的特性长度)//这边可以打个断点是否进来
                            y.DataType = "longtext";
                    }
                }
            });
DotNetNext commented 10 months ago

DataType是建表 ,记得把以前表删了才会有效

DotNetNext commented 10 months ago

相同类型可能ORM不会更新

DotNetNext commented 10 months ago

还有问题发完整测试用例

AtlantisDe commented 10 months ago

发完整测试用例

  • 应该是之前代码有问题实际上我代码问题应该是判断出了问题
  • 之前是这样 255 - 65535 判断的没成功.
                        var stringLengthAttribute = attributes.OfType<StringLengthAttribute>().FirstOrDefault();
                        if (stringLengthAttribute != null) // 设置字符串长度
                        {
                            column.Length = stringLengthAttribute.MaximumLength;
                            if (column.Length > 255&& column.Length <= 65535)
                            {
                                column.DataType = "text";
                            }
                        }