Skip to content

低代码模式下,如果在数据库中删除了主键字段,同步时不会重建主键 #2005

Open
@nluyan

Description

@nluyan

问题描述及重现代码:

低代码模式下,如果在数据库中删除了主键字段,同步时不会添加主键

var table = new TableDescriptor
{
    Name = "User",
    Columns =
     {
        new ColumnDescriptor{ Name = "Column1", DbType = "varchar", MapType = typeof(string), IsPrimary = true, StringLength = 255 },
        new ColumnDescriptor{ Name = "Column2", DbType = "varchar", MapType = typeof(string), StringLength = 255 },
     }
};
var context = new ZeroDbContext(fsql, [table]);
context.SyncStructure();

第一次运行以上代码同步后,Column1是主键,这是符合预期的。
然后在数据库中删除Column1字段,然后再次执行上述代码,可以看到Column1被创建了,但不是主键了。
期望:Column1依然是主键。
另外,如果字段为int类型,并且设置为自增则不会有这个问题,主键索引会被重建。但如果去掉自增也是同样的问题。
可能是同一原因的问题:
如果第一次将两个字段设置为主键,则在生成的数据表中看到是双主键,这是符合预期的。但如果第一次同步时只设置一个字段为主键,第二次同步时再加一个字段,则第二次加的这个主键字段就没有生效了。

数据库版本

MySQL 8.7

安装的Nuget包

.net framework/. net core? 及具体版本

.net core 8.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions