EF Core-表格列自动排序

时间:2018-12-18 03:20:31

标签: c# database entity-framework-core asp.net-core-2.0

我刚刚在当前使用EF代码优先迁移的.NET Core应用程序中添加了一些新模型。以前的模型可以按模型属性的顺序很好地迁移,但是现在情况似乎有所变化。新模型首先按键值排序,然后按字母顺序排序。

这是一个例子...

我的日志记录类:

[Table("Logs")]
public class LogEntry
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public string Id { get; set; }

    public LogEntryType Type { get; set; }

    [StringLength(4000)]
    public string Message { get; set; }

    [StringLength(4000)]
    public string StackTrace { get; set; }

    public DateTime LogTimeUtc { get; set; } = DateTime.UtcNow;
}

我在VS 2017中输入我的软件包管理器控制台:

add-migration InitialCreate -Context LoggingContext

并在迁移构建器中产生此结果:

migrationBuilder.CreateTable(
            name: "Logs",
            columns: table => new
            {
                Id = table.Column<string>(type: "nvarchar(450)", nullable: false),
                LogTimeUtc = table.Column<DateTime>(type: "datetime2", nullable: false),
                Message = table.Column<string>(type: "nvarchar(4000)", maxLength: 4000, nullable: true),
                StackTrace = table.Column<string>(type: "nvarchar(4000)", maxLength: 4000, nullable: true),
                Type = table.Column<int>(type: "int", nullable: false)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_Logs", x => x.Id);
            });

是否注意到属性的顺序已更改?然后,在使用以下相同的顺序时,会将其应用于数据库:

update-database -Context LoggingContext

如何使EF Core停止订购我的色谱柱?上一次我为该应用程序创建新表时(使用完全相同的方法,距今2个月),它保留了其顺序,从那以后我不做任何事情。

1 个答案:

答案 0 :(得分:0)

它发生在2.0,EF Core 2.1中,或者在更新迁移后以与类中声明属性相同的顺序最初为表生成列。请参阅here