不支持泛型实体以SugarTable指定表名吗?还是我没用对? 返回

SqlSugar
6 202

实体类如下

[SugarTable("my_configurations", IsDisabledDelete = true)]
public class GenericConfiguration<TConfig>
{
    [SugarColumn(ColumnName = "id", IsPrimaryKey = true, IsIdentity = true)]
    public int Id { get; set; }
    
    [SugarColumn(ColumnName = "code_identity")]
    public string CodeIdentity { get; set; }
    
    [SugarColumn(ColumnName = "configuration_type")]
    public string ConfigurationType { get; set; }
    
    [SugarColumn(ColumnName = "configuration", IsJson = true)]
    public TConfig Configuration { get; set; }

    [SugarColumn(ColumnName = "create_at")]
    public DateTime? CreateAt { get; set; }

    [SugarColumn(ColumnName = "modify_at")]
    public DateTime? ModifyAt { get; set; }

    [SugarColumn(ColumnName = "delete_at")]
    public DateTime? DeleteAt { get; set; }

   
    public static GenericConfiguration<TConfig> GetConfiguration(int id)
    {
        using var client = RemoteConfiguration.Instance.CreateMariaDbClient();
        var st = Attribute.GetCustomAttribute(typeof(GenericConfiguration<TConfig>), typeof(SugarTable)) as SugarTable;
        return client.Queryable<GenericConfiguration<TConfig>>()
            .AS(st.TableName) // 不AS得到得SQL中FROM后得表名就是GenericConfiguration`1
            .Where(c => c.Id == id)
            .First();
    }

    public bool Save(bool forceNew = false)
    {
        var result = false;
        using var client = RemoteConfiguration.Instance.CreateMariaDbClient();
        if (Id > 0 && !forceNew)
        {
            ModifyAt = DateTime.Now;
            var st = SugarTable.GetCustomAttribute(typeof(GenericConfiguration<TConfig>), typeof(SugarTable)) as SugarTable;
            client.Updateable(this)
                .AS(st.TableName) // 此处AS都没效果,表名还是GenericConfiguration`1
                .ExecuteCommand();
        }
        else
        {
            Id = 0;
            CreateAt = DateTime.Now;
            var st = SugarTable.GetCustomAttribute(GetType(), typeof(SugarTable)) as SugarTable;
            client.Insertable(this)
                .AS(st.TableName) // 此处AS都没效果,表名还是GenericConfiguration`1
                .ExecuteCommandIdentityIntoEntity();
        }
        return result;
    }


如上代码:

  1. 首先是查询,不`AS`一下,它自己没法从SugarTable中读到表名;

  2. 其次就是在插入和更新是`AS`都没有用


这是因为其它场景有什么语言特性冲突而有意为之,还是BUG?

热忱回答6

  • fate sta fate sta VIP0
    1个月前

    GenericConfiguration<TConfig> 这种类型没办法操作

    0 回复
  • fate sta fate sta VIP0
    1个月前

    GenericConfiguration 这样就行

    0 回复
  • @fate sta

    这种类型没法操作是什么意思?

    我现在没法操作是因为SqlSugar在泛型实体的情况下不去读SugarTable中的表名,查询时 AS 一下还是能支持的,插入更新时IIsertable<T>和IUpdateable<T>也是有 AS 方法的,但调用了却没有任何效果,感觉是没实现或者是在MySql的Provider中没有实现这个方法?

    我有一个表,其中一个字段就是JSON,可以允许多个功能场景想将该场景的业务性配置以JSON的形式往这个通用的配置表里存储。

    以C#语言本身的语法而言在这个场景下我没有遇到使用瓶颈,所以困惑为什么不支持。


    0 回复
  • fate sta fate sta VIP0
    1个月前
    0 回复
  • fate sta fate sta VIP0
    1个月前

    不要在实体上加泛型 ,类型可以用  对象

    0 回复
  • fate sta fate sta VIP0
    1个月前

    如果想动态可以用JObject类型

    0 回复