【问题标题】:Why is Entity Framework losing my indexes?为什么实体框架会丢失我的索引?
【发布时间】:2013-05-20 16:54:47
【问题描述】:

当我使用像 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);

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-11
      • 1970-01-01
      • 2011-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多