我使用代码优先创建数据库。现在我试图制作一个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);
}
}
那么问题是什么?
答案 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>"
然而,命令我已经经历过这样的事情。有时意味着您将收到此错误,或者它将显示通常需要进行其他迁移步骤的消息。要解决这个问题,请确保
除此之外,您可以检查__MigrationHistory表是否包含所有迁移步骤,包括最新的,因为实体框架根据此表的记录测试当前模型。
其中一些伏都教(如重建和清洁)仅在EF 4.4附近需要。我想这个领域的更新数据库脚本也得到了改进。