2017-11-30 12 views
-1

私はサイトを持っています。まずCOdeを使用します。マイ・マイグレーション・マイグレーション・コマンドは、以下のコードを生成しました。テーブルコードを最初に生成し、アプリケーション実行時にテーブルを生成しない

public partial class StudentEntity : DbMigration 
{ 
    public override void Up() 
    { 



     CreateTable(
      "dbo.Student", 
      c => new 
       { 
        id = c.Int(nullable: false, identity: true), 
        name = c.String(), 
       }) 
      .PrimaryKey(t => t.id); 


    } 

これで、サイトが初めて実行されたときに、私はStudentテーブルをDB(SQLサーバー)で生成したいと思っています。

今はサイトを実行するとテーブルが作成されません。これどうやってするの?私は、任意のシードデータは

public partial class flagen:DbContext 
{ 
    public flagen() : base("name=cf2") 
    { 
    } 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 

     modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
    } 
    //old entity 
    public virtual DbSet<flag> flags { get; set; } 
    //new entity 
    public virtual DbSet<Student> students { get; set; } 
} 

は、その後、私はテーブルが作成されますので、コンテキストを使用しようとした

マイデシベルコンテキストクラスを初期化したいいけません。それは、「データベースが作成されてから 『flagen』コンテキストをバックアップモデルが変更されました。データベースを更新するために、コードファーストの移行を使用することを検討してください」というエラーがスローされます 私はクラス

Database.SetInitializer<flagen>(null); 
     base.OnModelCreating(modelBuilder); 

をdbcontextするために以下の2行を追加して、今それが言います「無効なオブジェクト名の学生」

どのような解決方法がありますか?

+0

サイトの起動時にEFが初期化されません。最初にコンテキストを使用しようとするとEFが実行されます。あなたはそれをやってみましたか? – DavidG

+0

@DavidGが最初にコンテキストを使用しようとすると次のようなエラーが表示される:「データベースが作成されてから、 'flagen'コンテキストをサポートするモデルが変更されました。 .com/fwlink /?LinkId = 238269)。 " – Alex

+0

これは別の質問です... – DavidG

答えて

0

データベースをマイグレーションして最後に追加したマイグレーションに移行するInitializerを定義する方法もあります。したがって、すべてのテーブルが作成され、コンフィグレーションのSeedメソッドも実行されます。データをシードするために使用できます。 次の例では、データコンテキストの最初の初期化時にデータベースが最後の既存の移行(したがってすべてのテーブルの作成)に更新されます。 (var dbContext = new MyDatabaseContext()) 私の意見では、あなたはあまりにもチェックアウトできるAutomaticMigrationsEnabled = trueを使用するよりもはるかにクリーンな方法です。 ;)

ここでは、定義済みの動作でMigrateDatabaseToLatestVersionイニシャライザを使用する例を示します。

public partial class MyDatabaseContext : DbContext 
{ 
    public virtual DbSet<Student> students { get; set; } 



    public MyDatabaseContext() : base("MyDatabaseContextConnectionString") 
    { 
     System.Data.Entity.Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDatabaseContext, Migrations.Configuration>()); 
    } 



    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     // here we want to define the entities structure 
    }  
} 

あなたは初期化自体hereMSDN - MigrateDatabaseToLatestVersion)に関するいくつかのより多くの情報を見つけるでしょうし、hereEntity Frameworkのチュートリアル - コード・ファーストチュートリアル - 自動移行)はいくつかのより多くの背景を持つ別の例であります情報と例。

関連する問題