2016-01-26 66 views
1

到目前爲止,我已經允許EF爲我的項目自動生成索引和鍵名稱,但不幸的是我開始在一種情況下達到字符限制。基本上我有兩個具有集羣鍵(4列)的表,並且需要在它們之間創建一個查找表。一旦我這樣做壽,我得到的錯誤:在Entity Framework Core 1.0中,您如何重新命名索引?

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

最好是在流利的API,我怎麼能手動命名實體框架7的外鍵索引所以它不是FK_table2_table1_table1ID?例如,在我下面的簡單示例中,如何將FK從租戶表FK_tbl_Person_tbl_Tenant_TenantID重命名爲FK_Tenant?

enter image description here

+0

您使用的是什麼版本的EntityFramework? – Rob

+0

實體框架7但大部分東西在6似乎工作.. – chris

+0

它不重複EF核心有完全不同的API。 –

回答

0

我用這個教程使用VS2015安裝EF:

EF - Console Application to New Database

基本上是:

  • 確保您的目標的.NET Framework 4.5.1或更高版本。
  • 確保您使用的是最新版本的nuget package manager
  • 安裝這兩個包:
    • EntityFramework.MicrosoftSqlServer - 預
    • EntityFramework.Commands - 預

我我們創建了一個簡單的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"); 

這時就需要使用包來創建遷移您的上下文Manager控制檯:

  • 附加遷移MyFirstMigration

最後更新使用軟件包管理器控制檯數據庫:

  • 更新,數據庫

使用SQL Server Management Studio中,我可以檢查我的索引的名字:

enter image description here

相關問題