为什么Entity Framework会丢失我的索引?

时间:2013-05-20 16:54:47

标签: c# database entity-framework indexing ef-migrations

当我使用像DropCreateDatabaseAlwaysMigrateDatabaseToLatestVersion这样的数据库初始化程序来创建我的Entity Framework(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);

1 个答案:

答案 0 :(得分:0)

您使用的方法是“手动”代码首次迁移。在哪里你可以摆弄脚本。自动迁移或删除创建,EF只是将脚本组合在一起以匹配表和外键并将其弹出。即你在添加代码之前在生成的类中看到的内容。 : - )

使用自动迁移/创建方案,然后直接调用SQL命令以从代码添加索引。您有SQL代码来创建索引。只需触发初始化程序并跟进创建索引自定义例程。