4

我使用 EF Core 2.1 创建 SQL Server 数据库,但数据库列排序没有将继承列放在最后,以下是我的实体代码:

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
}

public class RssBlog : Blog
{
    public string RssUrl { get; set; }
}

当前列排序为:

1.RssUrl
2.BlodId
3.Url

我希望它在这样的数据库中:

1.BlodId
2.Url
3.RssUrl

你能告诉我如何修复数据库列的顺序吗?谢谢!

我是英语初学者,如果我的单词或句子有问题,我很抱歉。

4

2 回答 2

1

这是我在 EF Core 2.1 Preview 1 发布但尚未修复(当前版本 2.1)时提交的 Entity Framework Core 的未解决问题。

2018 年 10 月 6 日更新

实体框架核心团队计划在明年年初的 EF Core 3.0 版本中修复此问题。

这是详细信息:https ://github.com/aspnet/EntityFrameworkCore/issues/11314

于 2018-07-20T17:43:37.863 回答
0

我在研究问题的解决方案时看到的一个技巧。

添加迁移时,您将获得以下脚手架迁移文件

migrationBuilder.CreateTable(
                name: "RssBlog",
                columns: table => new
                {
                    BlogId = table.Column<int>(nullable: false)
                        .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
                    Url = table.Column<string>(nullable: true),
                    RssUrl = table.Column<string>(nullable: true)
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_RssBlog", x => x.BlogId);
                });

表列排序结果如下;

BlogId
Url
RssUrl

您可以重新排序脚手架迁移文件中的列;

migrationBuilder.CreateTable(
                    name: "RssBlog",
                    columns: table => new
                    {
                        RssUrl = table.Column<string>(nullable: true),
                        BlogId = table.Column<int>(nullable: false)
                            .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
                        Url = table.Column<string>(nullable: true)
                    },
                    constraints: table =>
                    {
                        table.PrimaryKey("PK_RssBlog", x => x.BlogId);
                    });

重新排序后,表格列的顺序如下;

RssUrl
BlogId
Url

因此,在 ef 核心团队发布列顺序功能(相关问题)之前,我们可以像上面一样对我们的列进行排序。

详细的博文

于 2019-07-24T08:03:18.900 回答