簡體   English   中英

在Entity Framework Core 1.0中,如何重命名索引?

[英]In Entity Framework Core 1.0 how do you rename indexes?

到目前為止,我已經允許EF為項目自動生成索引和鍵名,但是不幸的是,在一種情況下,我開始達到字符數限制。 基本上,我有兩個帶有聚簇鍵的表(4列),並且需要在兩個表之間創建查找表。 一旦這樣做,我就會得到錯誤:

"The identifier that starts with [Long FK Name Here] is too long. Maximum length is 128.

最好在Fluent API中,如何在Entity Framework 7中手動命名外鍵索引,而不是FK_table2_table1_table1ID? 例如,在下面的簡單示例中,如何將租戶表FK_tbl_Person_tbl_Tenant_TenantID中的FK重命名為FK_Tenant?

在此處輸入圖片說明

我已使用本教程通過VS2015安裝EF:

EF-新數據庫的控制台應用程序

基本上:

  • 確保您的目標是.NET Framework 4.5.1或更高版本。
  • 確保您使用的是最新版本的nuget軟件包管理器
  • 安裝這兩個軟件包:
    • EntityFramework.MicrosoftSqlServer –預
    • EntityFramework.Commands –Pre

我用兩個實體創建了一個簡單的DbContext:

using Microsoft.Data.Entity;
using System.Collections.Generic;
public class SampleContext : DbContext
{
    public DbSet<Person> People { get; set; }

    public DbSet<Tenant> Tenants { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        // Visual Studio 2015 | Use the LocalDb 12 instance created by Visual Studio
        optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;");

        // Visual Studio 2013 | Use the LocalDb 11 instance created by Visual Studio
        // optionsBuilder.UseSqlServer(@"Server=(localdb)\v11.0;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;");
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        // Configure the name of the foreign key
        modelBuilder.Entity<Person>()
            .HasOne(p => p.Tenant)
            .WithMany(t => t.Persons)
            .HasConstraintName("MyForeignKey");

        // Configure the name of a unique index
        modelBuilder.Entity<Person>().HasAlternateKey(p => p.Email).ForSqlServerHasName("MyUniqueEmail");

    }
}

public class Person
{
    public int PersonId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public virtual Tenant Tenant { get; set; }
}

public class Tenant
{
    public Tenant()
    {
        Persons = new HashSet<Person>();
    }

    public int TenantId { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Person> Persons { get; set; }
}

因此,配置外鍵的名稱:

modelBuilder.Entity<Person>()
            .HasOne(p => p.Tenant)
            .WithMany(t => t.Persons)
            .HasConstraintName("MyForeignKey");

要配置唯一索引的名稱:

modelBuilder.Entity<Person>().HasAlternateKey(p => p.Email).ForSqlServerHasName("MyUniqueEmail");

然后,您需要使用Package Manager控制台為您的上下文創建遷移:

  • 添加遷移MyFirstMigration

最后使用Package Manager控制台更新數據庫:

  • 更新數據庫

使用Sql Server Management Studio,我可以檢查索引的名稱:

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM