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

相关问题