EF代码优先 - 无法检查模型兼容性,因为数据库不包含模型元数据

时间:2013-03-13 21:38:15

标签: entity-framework migration

我启用了自动迁移功能。然后,我删除了我的整个数据库。接下来,我从命令控制台执行Update-database,并重新创建了我的数据库。然后,我启动我的应用程序只是为了看到这个错误:

  

无法检查模型兼容性,因为数据库没有   包含模型元数据。只能检查模型兼容性   使用Code First或Code First Migrations创建的数据库。

那究竟是什么元数据,我怎样才能将实体框架指向它?

PS。我的数据库包含名为MigrationsHistory的表。

5 个答案:

答案 0 :(得分:6)

以下是我之前写过的解决这个问题的可能方法的详细说明......
(不完全是你所经历的,因此本身并不重复,但考虑到不同的场景)

https://stackoverflow.com/a/10255051/417747

总结......

  

对我有用的是使用Update-Database -Script

     

这会创建一个带有“迁移差异”的脚本,您可以这样做   手动应用为目标服务器数据库上的SQL脚本(和您一样)   应该插入正确的迁移表行等。)。

     

如果仍然不起作用 - 你仍然可以做两件事......

     

a)删除迁移表(目标 - 在系统表下) - 按照   http://blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-automatic-migrations-walkthrough.aspx   那里的评论 - 应该回到以前的行为,如果   你确定你的Db-s是相同的 - 它只是'信任'   你”,

     

b)作为我使用的最后手段 - 制作一个Update-Database -Script   完整模式(例如,通过初始化一个应该强制执行的空数据库   '完整脚本'),找到INSERT INTO [__MigrationHistory]记录,   只需运行它们,将它们插入数据库,并确保您的   数据库 - 和代码匹配,

     

应该让事情再次同步。

如果有帮助

答案 1 :(得分:1)

将此添加到您的上下文中:

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{
    modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
}

答案 2 :(得分:1)

分离您的本地数据库说例子&#39; database1.mdf&#39;来自visual studio&#39;服务器资源管理器&#39;然后打开SQL Server管理工作室右键单击Databases&gt;附上然后浏览相同的数据库.mdf&#39;如果您没有访问权限,则将mdf和ldf文件复制并通过c驱动器并进行附加。

然后在sql server上打开新的查询窗口,然后复制你的身份表,如下面的查询。

*&#39;从Database1.dbo中选择*进入[__MigrationHistory] ​​.__ MigrationHistory&#39; *

答案 3 :(得分:0)

  1. 包管理器控制台&gt; 启用 - 迁移-EnableAutomaticMigrations
  2. 配置迁移/ Configuration.cs
  3. 包管理器控制台&gt; 更新的数据库的

答案 4 :(得分:-1)

我使用Entity Framework 6,SQL 2008 R2,VS 2013 要解决此问题,请仅使用以下过程:

1)删除现有数据库(使用EF模型创建的现有数据库{代码优先})
2)再次运行APP。

前例示查询代码(在布局中):
如果我的模型是更改并在用户表中搜索用户名,则此代码创建db。

<body>
    @{
        // Delete && Create ...
        Database.SetInitializer(new DropCreateDatabaseIfModelChanges<DBContext>());

        var db = new DBContext();
        var SearchingUser = db.Users.Where(c => c.UserName == "qwertyui");
        if (SearchingUser.Count() == 0) {
            var User = new Users { UserName = "qwertyui",Password = "12345678" };
            db.Users.Add(User);
            db.SaveChanges();
        }

    }


    @RenderSection("scripts", required: false)
    @RenderBody()
</body>