为什么codefirst时实体没有任何变化,每次运行都会重新创建表 返回

SqlSugar 沟通中
9 165
该叫什么 itben 发布于1周前
悬赏:0 飞吻

为什么codefirst时实体没有任何变化,每次运行都会重新创建表

`每次运行都会重新创建表`表现为在数据库管理工具中查看表列表,每次都会新增表(表名+时间)

但是我的实体结构没有任何变化

数据库是mysql9.6.0

热忱回答9

  • 每次新增表那肯定会报错的。如果修改表是有可能的。 如果用了columndatatype 属性 ORM不知道类型会在修改一下。

    0 回复
  • 你不想更新表也以禁用。看文档迁移

    0 回复
  • itben itben VIP0
    1周前

    我的描述有问题,不是新增表,就是每次运行都会修改表从而产生很多备份表(表名+时间)

    但是实体类没有任何变化,也没有使用columndatatype

    该如何排查,不想"禁用"

    0 回复
  • itben itben VIP0
    1周前
    [SugarColumn(ColumnName = "MiniQRCode", IsJson = true, IsNullable = true)]
    public MiniQRCode MiniQRCode { get; set; }
    [SugarColumn(ColumnName = "Question", IsNullable = true, Length = 5000)]
    public string Question { get; set; }
    [SugarColumn(ColumnName = "Configs", IsNullable = true, IsJson = true, DefaultValue = "{}")]
    public Dictionary<string, string> Configs { get; set; }

    我通过排查发现,如果表里面存在上述的字段时就会导致即使没有任何修改每次也会产生修改的备份表

    0 回复
  • itben itben VIP0
    1周前

    但是此问题仅在mysql数据库会出现,sqlite时没有,其他数据库不知道

    0 回复
  • 代码问题,你用了backuptable

    0 回复
  • 检查codefirst代码

    0 回复
  • itben itben VIP0
    1周前

    确实用了

    DbScoped.SugarScope.CodeFirst.BackupTable().InitTables(types.ToArray());
    BackupTable目的是在表变化时备份原表,我这儿实体没有任何变化,每次都会备份新的表,而且sqlite下就没有该问题,mysql时只要有前面提到的字段类型时就会每次都备份,不管实体有无变化,这和预期不一致


    0 回复
  • itben itben VIP0
    1周前

    如果说BackupTable的预期行为不是仅备份变化的表而是备份所有表的话,那也和预期不一致

    mysql下如果没有包含前面提到的字段类型时,只要实体没有变化就没有任何备份表记录

    slqite下完全没有


    所以不管如何定义BackupTable,目前来说都是有问题的

    0 回复