[英]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:
基本上:
我用兩個實體創建了一個簡單的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控制台為您的上下文創建遷移:
最后使用Package Manager控制台更新數據庫:
使用Sql Server Management Studio,我可以檢查索引的名稱:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.