1

我有一个ASP.NET MVC 4项目实体框架5,.NET 4.5和Visual Studio 2012. 在我的解决方案中,我把所有的模型放在一个名为Model的项目中,所有的Repositories和我的DbContext放在一个名为Data的项目中。 我使用Enable-Migrations命令激活Data项目中的迁移。我决定手动处理它们。如果我使用Add-Migration命令创建新的迁移,那么所有工作都很好。例如,如果我向表中添加一个新列,它可以正常工作。我可以看到数据库模式中的新列,并将新记录看到_MigrationHistory表中。 此时,在创建新列时,我需要将此列添加到正确的模型中。所以,我将此方法添加到我的代码优先模型类中,并运行该项目。 它删除我的数据库,并初始化它的初始迁移。 我无法调整模型而不会丢失所有数据。 我如何避免这种行为? 感谢实体框架5删除我的数据库更改模型

UPDATE:在Global.asax中

protected void Application_Start() 
     { 

      // init basic data on database 
      System.Data.Entity.Database.SetInitializer(new Models.InitData()); 

      AreaRegistration.RegisterAllAreas(); 

      RegisterGlobalFilters(GlobalFilters.Filters); 
      RegisterRoutes(RouteTable.Routes); 

      _container = Bootstrapper.GetWindsorContainer(); 

     } 
+0

您可以从Global.asax的Migrations文件夹和Application_Start方法发布您的Configuration.cs代码吗? –

+0

我已经发布他们的问题。谢谢 –

回答

2

Configuration.cs

namespace NegoziazioneEventi.Data.Migrations 
{ 
    using System; 
    using System.Data.Entity; 
    using System.Data.Entity.Migrations; 
    using System.Linq; 

    internal sealed class Configuration : DbMigrationsConfiguration<NegoziazioneEventi.Data.NeDataContext> 
    { 
     public Configuration() 
     { 
      AutomaticMigrationsEnabled = false; 
     } 

     protected override void Seed(NegoziazioneEventi.Data.NeDataContext context) 
     { 

     } 
    } 
} 

的Application_Start()我决定手动处理它们。如果我使用Add-Migration命令创建新的迁移,那么所有工作都很好。 ... 此时,在创建新列时,我需要将此列添加到正确的模型中。所以,我将此方法添加到我的代码优先模型类中,并运行该项目。

这是完全错误的迁移用法,也是EF删除数据库的原因。您必须先将属性添加到模型中,然后添加迁移,因为EF需要将正确的数据存储到_MigrationHistory表中,以便将该记录与该迁移的实际含义相匹配。

使用您当前的方法EF运行应用程序并检查_MigrationHistory表,但表中的记录不包含有关您新添加的属性的信息,因此EF认为已对您的模型进行了新更改并使用默认策略删除数据库并创建一个反映您当前模型的新模型。您可以关闭此行为,但您应该从正确使用迁移开始!

要关闭的行为使用:

Database.SetInitializer<YourDatabaseContext>(null); 

您使用的是自己的初始化这是最有可能从错误内置的初始化导致当前数据库的降得出。

+0

非常感谢。我找不到关于实体框架的完整参考文档,所以我在没有知识的情况下尝试。 –

+0

如果任何人需要教程来了解如何进行迁移,请访问:http://www.asp.net/web-forms/tutorials/deployment/deployment-to-a-hosting-provider/deployment-to-a-hosting-provider-部署-A-数据库更新-9-的-12 –