1

我得到這個問題,讓我生氣很多天。我編寫一個控制檯應用程序,首先使用代碼創建一個新數據庫,然後使用遷移來更新它。它工作得很好。但是,當我編寫一個wcf服務來執行像控制檯應用程序一樣的操作時,它不會按我的需要工作。問題是我無法使用代碼更新數據庫,但PM控制檯上的命令(Update-Database -Verbose)可以執行此操作。你能給我一些建議嗎? 這裏是我的代碼: Configuration.cs使用代碼先使用代碼而不使用PM控制檯命令更新數據庫

public Configuration() 
    { 
     AutomaticMigrationsEnabled = true; 
     AutomaticMigrationDataLossAllowed = true; 
    } 

    protected override void Seed(DatabaseInitialization.DatabaseModel context) 
    { 
     // This method will be called after migrating to the latest version. 

     // You can use the DbSet<T>.AddOrUpdate() helper extension method 
     // to avoid creating duplicate seed data. E.g. 
     // 
     // context.People.AddOrUpdate(
     //  p => p.FullName, 
     //  new Person { FullName = "Andrew Peters" }, 
     //  new Person { FullName = "Brice Lambson" }, 
     //  new Person { FullName = "Rowan Miller" } 
     // ); 
     // 
    } 

遷移文件:

public partial class InitialCreate : DbMigration 
{ 
    public override void Up() 
    { 
    } 

    public override void Down() 
    { 
    } 
} 

主文件:

public static void InitializeService(DataServiceConfiguration config) 
    { 

     Database.SetInitializer(new MigrateDatabaseToLatestVersion<DatabaseModel, DatabaseInitialization.Migrations.Configuration>()); 
     InitializeDatabase(); 

     config.SetEntitySetAccessRule("*", EntitySetRights.All); 
     config.SetServiceOperationAccessRule("*", ServiceOperationRights.All); 
     config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3; 
    } 

    public static void InitializeDatabase() 
    { 
     var context = new DatabaseModel();   
     context.Database.Initialize(true); 
    } 

謝謝!

回答

0

憤怒的割傷蛇與EF。 :-)

嘗試

Context.Database.CreateIfNotExists(); 

或使用初始化

Database.SetInitializer(new CreateDatabaseIfNotExists<TContext> 

似乎遷移工作得很好,一旦你有一個DB。 如果不存在,則創建步驟一。

+0

嗨soadyp,我絕對創建了一個數據庫,我想遷移到它。我在構造中聲明瞭Database.SetInitializer (null),但沒有運氣。 – 2013-05-07 08:12:51

+0

好吧,我希望遷移工作。 – 2013-05-07 08:47:44

相關問題