2011-09-14 5 views
1


データベースがEFCodeFirstアプローチで初期化されたときに、SQLスクリプトを使用してテーブルを作成する方法はありますか? (私は、自動テーブルの作成を避け、カスタムスクリプトを使ってテーブルを作成する)。EFCodeFirst - DBの初期化とテーブルの作成

私は以下のアプローチを試みましたが、SQLスクリプトごとにテーブルを作成しているようではありません。 context.Database.ExecuteSqlCommandは、DDL SQLとDML SQLで動作するはずです。

class Class1 
{ 

    public void InitializeDB() 
    { 
     Database.DefaultConnectionFactory = new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0"); 

     var dbInitializer = new DbInitializer(); 
     Database.SetInitializer(dbInitializer); 
     var target = new MyDbContext(); 
     target.Database.Initialize(true); 
    } 
} 

public class DbInitializer : DropCreateDatabaseAlways<MyDbContext> 
{ 
    private string CreateTableSQL = "CREATE TABLE [dbo].[UserLogins](" + 
         "[UserId] [int] IDENTITY(1,1) NOT NULL," + 
         "[UserName] [varchar](100) NOT NULL," + 
         "[FirstName] [nvarchar](200) NULL," + 
         "[LastName] [nvarchar](200) NULL)"; 

    public void InitializeDatabase(MyDbContext context) 
    { 
     context.Database.ExecuteSqlCommand(CreateTableSQL, string.Empty); 
    } 
} 

答えて

4

あなたがDropCreateDatabaseAlwaysを継承する場合、そのメソッドはvirtualではありませんので、あなたがInitializeDatabaseロジックを変更することはできません。 DropCreateDatabaseAlwaysを継承する代わりにIDatabaseInitializerを直接実装してください。