Entity Framework Core 1.0では、どのようにインデックスの名前を変更しますか?

c# entity-framework entity-framework-core

質問

今まで私はEFにプロジェクトのインデックスとキー名を自動的に生成させましたが、残念ながら1つのシナリオでは文字数制限に達し始めました。基本的に私はクラスタ化されたキー(4列)を持つ2つのテーブルを持っており、両方の間にルックアップテーブルを作成する必要があります。私はそれを行うと、私はエラーが表示されます:

"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の名前をテナント表FK_tbl_Person_tbl_Tenant_TenantIDからFK_Tenantに変更する方法を教えてください。

ここに画像の説明を入力

人気のある回答

私はこのチュートリアルを使ってVS2015を使ってEFをインストールしました:

EF - 新しいデータベースへのコンソールアプリケーション

基本的に:

  • .NET Framework 4.5.1以降をターゲットにしていることを確認します。
  • ナゲットパッケージマネージャの最新バージョンを使用していることを確認してください
  • この2つのパッケージをインストールします。
    • EntityFramework.MicrosoftSqlServer - Pre
    • EntityFramework.Commands†"Pre

2つのエンティティを持つ単純な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");

次に、パッケージマネージャコンソールを使用してコンテキストの移行を作成する必要があります。

  • マイグレーションの追加MyFirstMigration

最後に、パッケージマネージャコンソールを使用してデータベースを更新します。

  • データベースを更新する

SQL Server Management Studioを使用して、インデックスの名前を確認できます。

ここに画像の説明を入力



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ