我已启用自动迁移。然后,我删除了我的整个数据库。接下来,我Update-database
从命令控制台执行,它重新创建了我的数据库。然后,我启动我的应用程序只是为了看到这个错误:
无法检查模型兼容性,因为数据库不包含模型元数据。只能检查使用 Code First 或 Code First 迁移创建的数据库的模型兼容性。
那么元数据到底是什么,我如何将实体框架指向它呢?
PS。我的数据库包含名为MigrationsHistory
.
我已启用自动迁移。然后,我删除了我的整个数据库。接下来,我Update-database
从命令控制台执行,它重新创建了我的数据库。然后,我启动我的应用程序只是为了看到这个错误:
无法检查模型兼容性,因为数据库不包含模型元数据。只能检查使用 Code First 或 Code First 迁移创建的数据库的模型兼容性。
那么元数据到底是什么,我如何将实体框架指向它呢?
PS。我的数据库包含名为MigrationsHistory
.
这是我不久前写的解决此问题的可能方法的详细描述...
(不完全是您所经历的,因此本身不是重复的,但考虑到了不同的场景)
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] 记录,只需运行这些,将它们插入数据库,并确保您的数据库 - 和代码匹配,
这应该使事情再次同步运行。
如果有帮助
从 Visual Studio 的“服务器资源管理器”中分离您的本地数据库,例如“database1.mdf”,然后打开 SQL Server Management Studio 右键单击“数据库”>“附加”,然后浏览相同的“database1.mdf”文件。如果您没有访问权限然后将 mdf 和 ldf 文件复制并粘贴到 C 盘并附加。
然后在 sql server 上打开新的查询窗口,然后复制您的身份表,如下所示。
*'select * into [__MigrationHistory] from Database1.dbo.__MigrationHistory '*
将此添加到您的上下文中:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
}
我使用实体框架 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>