0

最初にEFコードを使用してプロジェクトを構築しました。また、フォーム認証も使用します。最近まで会員データベースとアプリケーションデータベースは別々に開発されていましたが、簡単にするためにそれらを1つのデータベースにまとめたいと思います。

私のコードファーストモデルのクラスの1つは「アプリケーション」と呼ばれるため、EFで生成されたテーブルは「アプリケーション」と呼ばれ、同じ名前のメンバーシップテーブルと競合します。これは私の現在のコンテキストの例です。

public partial class ExampleContext : DbContext
{
    public DbSet<Application> Applications { get; set; }
    public DbSet<Status> StatusTypes { get; set; } // notice the name of the property vs the name of the class
}

StatusTypesテーブル名は、すべてのStatusオブジェクトに名前が付けられたテーブルを生成していたため、コンテキスト内のプロパティの名前に基づいていると思いました。しかし、プロパティの名前を「。 」という名前のテーブルを生成してApplicationsいるような名前に変更すると、ですから、明らかにそれは物件の名前だけではなく、何かが足りません。MyApplicationsApplications

私の質問:EFにこのテーブルに別の名前を付けるにはどうすればよいですか?

4

3 に答える 3

1

構成クラスを使用して次のようなことを行うことはできませんでした:

public class ApplicationConfiguration : EntityTypeConfiguration<Application>
{
    public ClientConfiguration()
    {
        ToTable("SpecialApplication");
    }
}

次に、コンテキストで OnModelCreating をオーバーライドします。

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new ApplicationConfiguration());
    }

これにより、テーブルに SpecialApplication という名前が付けられ、競合が回避されます。

于 2012-10-17T17:24:53.450 に答える
0

デフォルトでは、エンティティ フレームワーク コードは、モデル クラスからデータベースを構築するときに、最初にテーブルの複数形の名前を生成します。OnModelCreatingテーブルに別の名前を指定して、db コンテキスト クラスのメソッドをオーバーライドできます。

public class YourDBCOntext:DbContext
{
  protected override void OnModelCreating(DbModelBuilder modelBuilder)
  {
    modelBuilder.Entity<Applications>().ToTable("MYApplications");
  }    
}

これをグローバルに行うこともできるため、どのテーブルにも複数形の名前が含まれません。

  protected override void OnModelCreating(DbModelBuilder modelBuilder)
  {
     modelBuilder.Conventions.Remove<PluralizingTaleNameConvention>();
  }    
}
于 2012-10-17T17:29:02.853 に答える
0

クラスの名前を変更したところ、機能しました。今のところ最も簡単な解決策。

于 2012-10-17T19:06:46.937 に答える