为什么是实体框架失去我的索引

本文关键字:我的 索引 失去 框架 实体 为什么 | 更新日期: 2023-09-27 18:14:22

当我使用像DropCreateDatabaseAlwaysMigrateDatabaseToLatestVersion这样的数据库初始化器来创建我的实体框架(5.0.0)数据库时,结果模式不包括我在迁移中定义的索引,这与我使用Update-Database创建数据库时不同。

我如何配置系统,使它使用数据库初始化器产生与按顺序运行迁移时相同的最终结果?

迁移示例

public override void Up()
{
    CreateIndex("dbo.Users", "Username", unique:true);
}

源于DropCreateDatabaseAlways (没有指数)

CREATE TABLE [dbo].[Users] (
    [Id]       BIGINT         IDENTITY (1, 1) NOT NULL,
    [Username] NVARCHAR (50)  NULL,
    [Email]    NVARCHAR (255) NULL,
    CONSTRAINT [PK_dbo.Users] PRIMARY KEY CLUSTERED ([Id] ASC)
);

源于Update-Database (包括指数)

CREATE TABLE [dbo].[Users] (
    [Id]       BIGINT         IDENTITY (1, 1) NOT NULL,
    [Username] NVARCHAR (50)  NULL,
    [Email]    NVARCHAR (255) NULL,
    CONSTRAINT [PK_dbo.Users] PRIMARY KEY CLUSTERED ([Id] ASC)
);
GO
CREATE UNIQUE NONCLUSTERED INDEX [IX_Username]
    ON [dbo].[Users]([Username] ASC);

为什么是实体框架失去我的索引

您使用的方法是"手动"代码优先迁移。你可以随意修改剧本。自动迁移或删除创建,EF只是把一个脚本放在一起匹配表和外键,然后弹出。这是您在添加代码之前在生成的类中看到的内容。: -)

使用自动化迁移/创建场景,然后直接调用SQL命令从代码添加索引。您有创建索引的SQL代码。只需触发初始化器,然后创建索引自定义例程。