对迁移 EF Core 中的列进行排序



'我正在开发一个EF Core应用程序,其中我继承了entity中的公共类。当我迁移和更新数据库时,首先创建继承的列,然后创建实体的属性。

只是好奇,我想知道是否可以自动设置SQL表中列创建顺序的方法。

//法典:

public class Employee: BasicEntity
{
    [Required(ErrorMessage = "Name is required")]
    [StringLength(60, ErrorMessage = "Name can't be longer than 60 characters")]
    public string Name { get; set; }
    [Required(ErrorMessage = "Age is required")]
    public int Age { get; set; }
    [Required(ErrorMessage = "DOB is required")]
    public DateTime DOB { get; set; }
    [Required(ErrorMessage = "City is required")]
    public int City { get; set; }
    [Required(ErrorMessage = "State is required")]
    public int State { get; set; }
    [Required(ErrorMessage = "Country is required")]
    public int Country { get; set; }
}
可以使用

[Column(Order=(] 在 EF core 中对列顺序使用数据批注

public class Employee: BasicEntity
    {
        [Column(Order=0)]
        [Required(ErrorMessage = "Name is required")]
        [StringLength(60, ErrorMessage = "Name can't be longer than 60 characters")]
        public string Name { get; set; }
        [Column(Order=1)]
        [Required(ErrorMessage = "Age is required")]
        public int Age { get; set; }
        [Column(Order=2)]
        [Required(ErrorMessage = "DOB is required")]
        public DateTime DOB { get; set; }
        [Required(ErrorMessage = "City is required")]
        public int City { get; set; }
        [Required(ErrorMessage = "State is required")]
        public int State { get; set; }
        [Required(ErrorMessage = "Country is required")]
        public int Country { get; set; }
    }

遗憾的是,EF Core 不支持显式列排序。关于这个问题有很多讨论: https://github.com/dotnet/efcore/issues/2272

可以使用此解决方案向项目添加对显式列排序的支持:https://github.com/premchandrasingh/EFCoreColumnOrder。此解决方案添加了 HasColumnOrder 扩展方法。示例文件夹中有一个使用示例。不要忘记替换 DbContext 中的相应服务。

此外,还可以在 EF 迁移中按正确的顺序手动排列列。

最新更新