5

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

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

那么元数据到底是什么,我如何将实体框架指向它呢?

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

4

5 回答 5

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)作为我使用的最后手段 - 制作完整模式的更新数据库 - 脚本(例如,通过初始化一个应该强制执行“完整脚本”的空数据库),找到 INSERT INTO [__MigrationHistory] ​​记录,只需运行这些,将它们插入数据库,并确保您的数据库 - 和代码匹配,

这应该使事情再次同步运行。

如果有帮助

于 2013-03-13T22:22:06.907 回答
1

从 Visual Studio 的“服务器资源管理器”中分离您的本地数据库,例如“database1.mdf”,然后打开 SQL Server Management Studio 右键单击​​“数据库”>“附加”,然后浏览相同的“database1.mdf”文件。如果您没有访问权限然后将 mdf 和 ldf 文件复制并粘贴到 C 盘并附加。

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

*'select * into [__MigrationHistory] ​​from Database1.dbo.__MigrationHistory '*

于 2014-09-13T10:53:02.977 回答
0
  1. 包管理器控制台 > Enable-Migrations -EnableAutomaticMigrations
  2. 配置迁移/Configuration.cs
  3. 包管理器控制台 >更新数据库
于 2015-03-25T10:12:22.623 回答
-1

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

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{
    modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
}
于 2013-03-13T22:15:06.857 回答
-1

我使用实体框架 6、SQL 2008 R2、VS 2013。
要解决此问题,请仅使用以下过程:

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

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

<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>
于 2014-05-24T11:51:12.967 回答