模型更改,首先使用代码更新数据库

时间:2014-05-18 12:41:14

标签: linq ef-code-first

我使用代码优先创建数据库。现在我试图制作一个linq表达式来从数据库中获取数据,但后来我得到了这个错误:

“自创建数据库以来,支持'FantasySport'上下文的模型已发生变化。请考虑使用Code First Migrations更新数据库”

所以我去包管理器控制台并输入update-database,它说没有什么可以更新的。

“PM> update-database 指定'-Verbose'标志以查看应用于目标数据库的SQL语句。 没有待定的基于代码的迁移。 运行种子方法。“

---- EDIT ------

这是初始化方法:

  private class SimpleMembershipInitializer
    {
        public SimpleMembershipInitializer()
        {
            Database.SetInitializer<UsersContext>(null);

            try
            {
                using (var context = new UsersContext())
                {
                    if (!context.Database.Exists())
                    {
                        // Create the SimpleMembership database without Entity Framework migration schema
                        ((IObjectContextAdapter)context).ObjectContext.CreateDatabase();
                    }
                }

                WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
            }
            catch (Exception ex)
            {
                throw new InvalidOperationException("The ASP.NET Simple Membership database could not be initialized. For more information, please see http://go.microsoft.com/fwlink/?LinkId=256588", ex);
            }
        }

那么问题是什么?

2 个答案:

答案 0 :(得分:1)

首先必须添加要更新的迁移。您可以通过在包管理器控制台中键入以下命令来完成此操作:

add-migration "a custom name for your migration here..."

这将导致创建迁移,之后您可以从包管理器控制台运行Update-database命令。

<强> [编辑] Database.SetInitializer方法指定了动态创建和种子数据库的策略。由于这是导致此错误的原因,并且由于我们通过update-database命令手动创建和播种数据库,因此我们希望将其关闭。 http://www.codeguru.com/csharp/article.php/c19999/Understanding-Database-Initializers-in-Entity-Framework-Code-First.htm

答案 1 :(得分:0)

为了能够通过迁移更新数据库,您必须使用

add-migration "<migration-name>"
然而,

命令我已经经历过这样的事情。有时意味着您将收到此错误,或者它将显示通常需要进行其他迁移步骤的消息。要解决这个问题,请确保

  • 没有隐藏的迁移文件,该文件未从项目中删除
  • 在发出update-database命令之前始终在add-migration命令之后构建项目
  • 确保在发出update-database命令的项目中指向数据库的连接字符串与指向程序使用的同一数据库的字符串相同。

除此之外,您可以检查__MigrationHistory表是否包含所有迁移步骤,包括最新的,因为实体框架根据此表的记录测试当前模型。

其中一些伏都教(如重建和清洁)仅在EF 4.4附近需要。我想这个领域的更新数据库脚本也得到了改进。